使用 Java 8 Lambda 选取列表中的元素,直到满足条件

2024-01-01

我正在尝试转变思维方式,以函数式方式进行思考,最近遇到了一种情况,我需要从列表中选取元素,直到满足条件,但我找不到一种简单、自然的方法来实现这一目标。显然我还在学习。

假设我有这个清单:

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

预先感谢您的投入

笔记: 在发表这篇文章之前我读过通过谓词限制流 https://stackoverflow.com/questions/20746429但我不知道如何才能使这个答案适应我的问题。任何帮助将不胜感激。


如果您确实必须使用 Streams API,请保持简单并使用索引流:

int lastIdx = IntStream.range(0, tokens.size())
        .filter(i -> tokens.get(i).toUpperCase().endsWith("STOP"))
        .findFirst()
        .orElse(-1);

List<String> myTokens = tokens.subList(0, lastIdx + 1);

或者制作一个新的List如果您想要不受原始列表支持的独立副本,请从子列表中删除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 8 Lambda 选取列表中的元素,直到满足条件 的相关文章

随机推荐