有人能告诉我应该如何使用消费者来达到相同的输出,因为这是行不通的吗?
String names = "John Alex Peter";
String[] namesSplitted = names.split(" ");
for (String s : namesSplitted) {
System.out.println(s);
}
Consumer<String> cons = x -> System.out.println(x.split(" "));
cons.accept(names);发布于 2017-06-25 09:05:23
Consumer接收并处理输入(即“消耗”输入)。
Consumer<String>一次消耗一个String。
在代码示例中,Consumer是System.out.println。
您可以通过拆分输入Stream<String>创建String,并通过调用forEach()将Stream的所有元素传递给Consumer<String>。
Consumer<String> cons = System.out::println;
Arrays.stream(names.split(" ")).forEach(cons);当然,没有必要将这个片段分成两行:
Arrays.stream(names.split(" ")).forEach(System.out::println);发布于 2017-06-25 09:20:06
你的Consumer接受String,但你接受String[]。
可以使用Pattern#splitAsStream拆分字符串,让Consumer接受String,例如:
Pattern.compile(" ").splitAsStream(names).forEach(System.out::println);或您可以使用String#replaceAll或String#join,例如:
Consumer<String> cons =System.out::println;
cons.accept(names.replaceAll(" ","\n"));
//OR
cons.accept(String.join("\n", names.split(" ")));发布于 2017-06-25 09:27:44
将Array转换为流,然后使用使用者。
public static void main(String args[]){
String names = "John Alex Peter";
String[] namesSplitted = names.split(" ");
for (String s : namesSplitted) {
System.out.println(s);
}
Consumer<String> printConsumer = System.out::println;
Arrays.stream(names.split(" ")).forEach( printConsumer);
// OR Simply
Arrays.stream(names.split(" ")).forEach( System.out::println);
}https://stackoverflow.com/questions/44744806
复制相似问题