2014-10-12 115 views
14

我發現this question有關從Java字符串得到一個java.util.streams.IntStream但我還沒有發現這個方法現在,我使用的Java 8如何將字符串轉換爲Java 8字符流?

更正:正如你們指出,我是使用Java 7.現在方法chars()在那裏。但問題仍然適用:

如何從字符串中獲得Stream<Character>

回答

31

我要你點my earlier answer這個話題,但事實證明,你已經鏈接到that questionother answer也提供了有用的信息。

如果你想char值,可以通過String.chars()使用IntStream返回,並投了intchar而不會丟失信息。其他答案解釋了爲什麼Stream類沒有CharStream原始專業化。

如果你真的想裝盒Character對象,然後用mapToObj()IntStream轉換爲引用類型的流。在mapToObj()內,將int的值投射到char。由於此處預計有物體作爲返回值,因此char將被自動裝箱到Character。這導致Stream<Character>。例如,

Stream<Character> sch = "abc".chars().mapToObj(i -> (char)i); 
sch.forEach(ch -> System.out.printf("%c %s%n", ch, ch.getClass().getName())); 

a java.lang.Character 
b java.lang.Character 
c java.lang.Character 
2

請確保您使用的是JDK 8.此方法位於CharSequence接口中,由String實現。

這段代碼工作正常:

import java.util.stream.IntStream; 

public class CharsSample { 

    public static void main(String[] args) { 
     String s = "123"; 
     IntStream chars = s.chars(); 
    } 
} 
+1

chars()方法在基類CharSequence!中。 – isnot2bad 2014-10-12 01:39:23

+0

是的,我得到使用Java 7 gradle,但我怎麼能從字符串得到流? – ElderMael 2014-10-12 01:43:46

+0

@ElderMael你使用Java 7還是Java 8?這些方法和類型對於Java 8來說是新的。 – 2014-10-12 01:48:20