小编典典

挑选列表中的元素,直到Java 8 Lambdas满足条件为止

java

我试图改变我的思维,以考虑功能性方法,最近遇到了一种情况,我需要从列表中选取元素,直到满足条件为止,而我找不到实现这一目标的简便方法。显然我还在学习。

说我有这个清单:

List<String> tokens = Arrays.asList("pick me", "Pick me", "pick Me",
    "PICK ME", "pick me and STOP", "pick me", "pick me and Stop", "pick me");

// In a non lambdas was you would do it like below
List<String> myTokens = new ArrayList<>();
for (String token : tokens) {
    myTokens.add(token);
    if (token.toUpperCase().endsWith("STOP")) {
        break;
    }
}

预先感谢您的输入

注意:在发布此内容之前,我阅读了通过谓词限制流,但是我看不到如何使该答案适应我的问题。任何帮助,将不胜感激谢谢。


阅读 224

收藏
2020-10-12

共1个答案

小编典典

一个选项使用需要两个函数的收集器,一个函数将字符串添加到列表,另一个函数合并先前可能并行创建的列表。对于每个参数,仅当先前的部分输出不以STOP结尾的元素结尾时,才添加字符串或整个列表:

tokens.stream().collect(() -> new ArrayList<String>(), (l, e) -> {
    if(l.isEmpty() || !l.get(l.size()-1).toUpperCase().endsWith("STOP"))
        l.add(e);
}, (l1, l2) -> {
    if(l1.isEmpty() || !l1.get(l1.size()-1).toUpperCase().endsWith("STOP"))
        l1.addAll(l2);
});
2020-10-12