打印低于阈值的动物总和

时间:2017-10-23 10:13:51

标签: java lambda functional-programming java-stream bluej

我试图解决书中的练习:首先使用Java的对象:使用BlueJ的实用介绍。

练习如下:

  

练习5.17 重写项目中的 printEndangered 方法以使用Streams。

原始代码是:

public void printEndangered(ArrayList<String> animalNames, int dangerThreshold)
{
    for(String animal : animalNames) {
        if(getCount(animal) <= dangerThreshold) {
            System.out.println(animal + " is endangered.");
        }
    }
}

我的尝试看起来像这样:

sightings.stream()
    .filter(s -> animalNames.equals(s.getAnimal()))
    .filter(s -> s.getCount() <= dangerThreshold)
    .mapToInt(s -> s.getCount())
    .forEach(s -> System.out.println(s));

2 个答案:

答案 0 :(得分:2)

getCount()方法属于包含printEndangered的类,而不属于s

public void printEndangered(ArrayList<String> animalNames, int dangerThreshold) {
    animalNames.stream()
               .filter(animal -> getCount(animal) <= dangerThreshold)
               .map(animal -> animal + " is endangered.")
               .forEach(System.out::println);
}

答案 1 :(得分:1)

sightings.stream()
//.filter(s -> animalNames.equals(s.getAnimal())) -- not required
.filter(s -> getCount(s) <= dangerThreshold)
//.mapToInt(s -> s.getCount()) -- not required
.forEach(s -> System.out.println(s + " is Endangered"));