gpt4 book ai didi

Java lambda:将 -> 运算符替换为::for 流过滤器

转载 作者:行者123 更新时间:2023-12-02 12:13:19 30 4
gpt4 key购买 nike

有一个事件类:

public class Event {
private int index;
public int getIndex() {return index;}
}

还有一种方法 - 它选择具有某些“index”属性值的事件子列表。极其简单,但这样的功能被广泛使用。

public List<Event> select(List<Event> scenario, List<Integer> indexesToInclude) {
Predicate<Event> indexMatcher = e -> indexesToInclude.contains(e.getIndex());
return scenario.stream().filter(indexMatcher).collect(Collectors.toList());
}

任务是避免使用 -> 运算符,而使用::运算符。为什么?因为e -> ...看起来像是此类常见任务的解决方法。

可以吗?我期望这样的语法(这当然不会编译):

Predicate<Event> indexMatcher = { indexesToInclude.contains(Event::getIndex) };

但是它可以是一系列方法或其他解决方案,无需编写循环或创建新的类/方法。

最佳答案

Is it possible to do?

没有。 Lambda 表达式(所谓的“解决方法”)就是实现此目的的方法。这就是它们被添加到语言中的目的。

(实际上......您可以通过定义一个匿名内部类以老式的方式做到这一点。但这不会是一句简单的话。)

<小时/>

Why? Because e -> ... looks like a workaround for such common task.

我想,这取决于你的观点。例如,语法纯粹主义者可能会将 s1 + i 视为 s1.concat(Integer.toString(i)) 的“解决方法”。

事实上,这些东西通常被称为“语法糖”……它们被添加到语言中是为了更容易编写简洁易读的代码。

显然,为了能够阅读代码,您首先需要了解语法,然后需要习惯它。

不幸的是,这里真正的问题似乎是您不喜欢 Java lambda 语法。抱歉,但您只需要习惯它即可。与之抗争是没有效果的。

关于Java lambda:将 -> 运算符替换为::for 流过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46374759/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com