2016-12-04 52 views
0
// code snippet 1:- 
Stream.of(Paths.get("/tmp").toFile().listFiles()).forEach(System.out::println); 

output: 
/tmp/.keystone_install_lock 
/tmp/.vbox-srirammuthaiah-ipc 
/tmp/a.txt 
/tmp/b.txt 
/tmp/com.apple.launchd.1enUeBRkSj 
/tmp/com.apple.launchd.KIcK6WPwWH 
/tmp/mbbservice.pid 
/tmp/mv.txt 
/tmp/wifi-12-03-2016__18:16:24.log 


// code snippet 2:- 
String line = "Hello how are you"; 
Stream.of(line.toCharArray()).forEach(System.out::println); 

output: 
Hello how are you 

這裏列表被認爲是文件陣列和被一個,而串處理的一個爲char陣列轉換不具有方法的流效果和被處理爲一個字符串。Java流不工作,如字符或字節陣列預期文件

我期待的是第二代碼片段的輸出應該像下面的文件流處理一樣。

Expected output: 
H 
e 
l 
l 
o 

h 
o 
w 

a 
r 
e 

y 
o 
u 

非常感謝您的幫助。

回答

4

要調用的Stream.of(..)兩個不同的重載:

Stream.of(T object) 
Stream.of(T... objects) 

toCharArray()返回char[]其不是T[]因爲原始陣列是特定類型從一個通用T[](這是罩下的Object[])不同。

所以基本上listFiles()返回File[]相匹配的簽名of(T... object)並生成包含所有File實例流而toCharArray()返回char[]相匹配of(T object)並返回一個包含只是元素的流。

記住,String類已經提供chars()方法,它返回你的目的的IntStream

"Hello how are you".chars().forEach(c -> System.out.println((char)c) } 
"Hello how are you".chars().mapToObj(c -> (char)c).forEach(...) 
+0

我在java.lang.String類中找不到chars()方法,你能解釋一下我提到哪個類嗎? –

+0

它的工作,非常感謝:) –

+0

@Sriram M:'字符()'在'CharSequence'界面中定義。 – Holger

1

Stream.of(char[])不起作用,因爲char是一種原始類型。相反,您可以使用IntStream.range,然後使用它來獲取字符。 Like,

String line = "Hello how are you"; 
char[] chars = line.toCharArray(); 
IntStream.range(0, chars.length).forEachOrdered(i -> System.out.println(chars[i])); 

這與您的預期輸出相符。

+0

謝謝您的答覆。 –