Java 8 Consumer by Line

时间:2017-06-25 09:00:56

标签: java java-8

有人可以告诉我应该如何使用消费者来达到相同的输出,因为这不起作用吗?

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);

3 个答案:

答案 0 :(得分:4)

Consumer接收输入并对其进行处理(即“消耗”它)。

Consumer<String>一次只消耗一个String

在您的代码示例中,ConsumerSystem.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#replaceAllString#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);

}