java - 选择列表的元素直到满足 Java 8 Lambdas 的条件

标签 java lambda java-8 java-stream

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

假设我有这个列表:

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

提前感谢您的投入

注意: 在发布这篇文章之前,我阅读了 Limit a stream by a predicate但我看不出如何使这个答案适应我的问题。任何帮助将不胜感激。

最佳答案

如果您真的必须使用 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

关于java - 选择列表的元素直到满足 Java 8 Lambdas 的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32290278/

相关文章:

java - 加载多个属性文件

java - Java8中可以通过流给object中的变量赋值吗?

c++ - 使用 count_if() 查找相同的字符串值

java - Collectors.joining (",") 是线程安全的吗?

java - 在 JSR-310 中查找下一个星期几

java - Spark 提交到 Amazon EMR 时如何指定自定义 log4j.configuration 的位置?

java - 通过正则表达式搜索和替换文本段落中的管道分隔字符

java - org.json.JSONException : Value All fields must be completed at msg of type java. lang.String 无法转换为 JSONArray

c++ - 我无法通过引用捕获传递 lambda

java-8 - 如何将安全点日志输出到指定文件中?