打印出过滤流对象的某些字段

时间:2019-01-02 17:55:54

标签: java lambda java-8 java-stream

让我们假设有一个Fox类,它具有名称,颜色和年龄。假设我有一个狐狸列表,并且想打印出这些狐狸的名字,它们的颜色是绿色。我想使用流来做到这一点。

字段:

  • 名称:私有字符串
  • 颜色:私有字符串
  • 年龄:私有整数

我编写了以下代码来进行过滤和Sysout:

gatsby build

但是,我的代码中存在一些语法问题。

出什么问题了?我应该如何解决?

3 个答案:

答案 0 :(得分:9)

您不能将方法引用与lambda结合使用,只能使用以下方法之一:

foxes.stream()
     .filter(fox -> fox.getColor().equals("green"))
     .forEach(fox -> System.out.println(fox.getName()));

或另一个:

foxes.stream()
     .filter(fox -> fox.getColor().equals("green"))
     .map(Fox::getName) // required in order to use method reference in the following terminal operation
     .forEach(System.out::println);

答案 1 :(得分:8)

只需使用:

foxes.stream().filter(fox -> fox.getColor().equals("green"))
              .forEach(fox -> System.out.println(fox.getName()));

原因是因为您不能同时使用方法引用和lambda表达式。

答案 2 :(得分:1)

您可以尝试:

foxes.stream().filter(this::isColorGreen).map(Fox::getName).forEach(System.out::println);


public boolean isColorGreen(Fox fox) {
    return fox.getColor().equals("green");
}