我试图改变我的思维,以考虑功能性方法,最近遇到了一种情况,我需要从列表中选取元素,直到满足条件为止,而我找不到实现这一目标的简便方法。显然我还在学习。
说我有这个清单:
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; } }
预先感谢您的输入
注意:在发布此内容之前,我阅读了通过谓词限制流,但是我看不到如何使该答案适应我的问题。任何帮助,将不胜感激谢谢。
一个选项使用需要两个函数的收集器,一个函数将字符串添加到列表,另一个函数合并先前可能并行创建的列表。对于每个参数,仅当先前的部分输出不以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); });