有人可以告诉我应该如何使用消费者来达到相同的输出,因为这不起作用吗?
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);
答案 0 :(得分:4)
Consumer
接收输入并对其进行处理(即“消耗”它)。
Consumer<String>
一次只消耗一个String
。
在您的代码示例中,Consumer
为System.out.println
。
您可以通过拆分输入Stream<String>
来创建String
,并通过调用Stream
将此Consumer<String>
的所有元素传递给forEach()
:< / p>
Consumer<String> cons = System.out::println;
Arrays.stream(names.split(" ")).forEach(cons);
当然,没有必要将这个片段分成两行:
Arrays.stream(names.split(" ")).forEach(System.out::println);
答案 1 :(得分:4)
您的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(" ")));
答案 2 :(得分:0)
将数组转换为流,然后使用使用者。
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);
}