Java lambdas:replace - >运算符with :: for stream filter

时间:2017-09-23 00:10:20

标签: java lambda operators

有一个事件类:

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

然而,如果没有编写循环或创建新的类/方法,它可以是一系列方法或其他解决方案。

1 个答案:

答案 0 :(得分:1)

  

有可能吗?

没有。 Lambda表达式(所谓的&#34;解决方法&#34;)是实现此目的的方法。这就是他们被添加到语言中的内容。

(实际上......你可以通过定义一个匿名的内部类来做老派的方式。但它不会成为一个单行。)

  

为什么呢?因为e -> ...看起来像是这种常见任务的解决方法。

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

事实上,这些东西通常被称为&#34;句法糖&#34; ...并将它们添加到语言中以便于编写简洁易读的代码。

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

不幸的是,似乎这里真正的问题似乎是你不喜欢 Java lambda语法。对不起,但你只需要习惯它。战斗它不会起作用。