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