java - 打印低于阈值的动物总数

标签 java lambda functional-programming java-stream bluej

我正在尝试解决书中的一个练习:Objects first with Java: A practical introduction using BlueJ。

练习如下:

Exercise 5.17 Rewrite the printEndangered method in your project to use 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));

最佳答案

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

关于java - 打印低于阈值的动物总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46886888/

相关文章:

python - Python 相对于 Ruby 的限制 : lambda's

Python 和函数式编程 : is there an apply() function?

java - 无法编写 X_path 以从应用程序中的应用程序相关报告获取文本,

python - 应用 map 函数时在 python 中投影变量

java - JUnit:放置测试方法的最佳策略

java - 多态性的好处

java - Jersey 错误 : MessageBodyReader not found for media type=application/json

java - 如何避免Java中的无限循环

C++11 lambda 捕获列表引用

c# - 为什么 lambda 语句周围的括号会导致语法错误?