如何将以下for循环转换为使用带流的Java lambda?
List<Fruit> fruits = createFruitArrayList (); // creates a list of fruits
Fruit largeApple = null; // holds the largest apple so far for
for (Fruit fruit : fruits) {
if (fruit.getType () == “Apple”) {
if (largeApple == null ||
largeApple.size () < fruit.size ()) {
largeApple = fruit;
}
}
}
答案 0 :(得分:1)
您可以使用comparator来比较两个值
Comparator<Fruit> comp = (fruit1, fruit2) -> Integer.compare( fruit1.size(), fruit2.size());
Fruit largeApple = fruits.stream().max(comp).get();
另外,比较字符串的方式是错误的
if (fruit.getType () == “Apple”)
你想要的是什么
if (fruit.getType().equals("Apple"))
有关详细信息,请查看以下问题: How do I compare strings in Java?
答案 1 :(得分:1)
危险,威尔罗宾逊!不要使用==
来比较字符串!使用equals()
。
那就是说,这段代码等同于你的循环:
Fruit largestApple = fruits.stream()
.filter(f -> f.getType().equals("Apple"))
.max(Comparator.comparing(Fruit::size))
.orElse(null);
请注意使用方法引用(而不是lambda)作为传递给comparing()
的参数。
答案 2 :(得分:0)
这看起来很有效:
form
BTW:您的示例代码非常糟糕 - 请在真正的语法正确的java中发布工作示例。