我正在尝试转变思维方式,以函数式方式进行思考,最近遇到了一种情况,我需要从列表中选取元素,直到满足条件,但我找不到一种简单、自然的方法来实现这一目标。显然我还在学习。
假设我有这个清单:
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(使用前将#替换为@)