有一个事件类:
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());
}
任务是避免使用 - &gt;运算符赞成::运算符。为什么?因为 e - &gt; ...... 看起来像是这种常见任务的解决方法。
有可能吗? 我希望语法(当然这不会编译):
Predicate<Event> indexMatcher = { indexesToInclude.contains(Event::getIndex) };
然而,如果没有编写循环或创建新的类/方法,它可以是一系列方法或其他解决方案。
答案 0 :(得分:1)
有可能吗?
没有。 Lambda表达式(所谓的&#34;解决方法&#34;)是实现此目的的方法。这就是他们被添加到语言中的内容。
(实际上......你可以通过定义一个匿名的内部类来做老派的方式。但它不会成为一个单行。)
为什么呢?因为
e -> ...
看起来像是这种常见任务的解决方法。
我想,这取决于你的观点。例如,语法纯粹主义者可能会将s1 + i
视为&#34;解决方法&#34; s1.concat(Integer.toString(i))
。
事实上,这些东西通常被称为&#34;句法糖&#34; ...并将它们添加到语言中以便于编写简洁易读的代码。
显然,为了能够阅读您首先需要理解语法的代码,您需要习惯它。
不幸的是,似乎这里真正的问题似乎是你不喜欢 Java lambda语法。对不起,但你只需要习惯它。战斗它不会起作用。