我正在嘗試根據條件過濾列表。是否有其他方法可以中斷 java 8 流來停止過濾?舉個例子:假設我有以下列表。List<String> list = Arrays.asList("Foo","Food" ,"Fine","Far","Bar","Ford","Flower","Fire");list.stream() .filter(str -> str.startsWith("F")) //break when str doesn't start with F .collect(Collectors.toList());我想要所有從頭開始以“F”開頭的字符串,一旦發現不以“F”開頭的字符串,我想停止過濾。如果沒有流,我會執行以下操作:List<String> result = new ArrayList<>();for(String s : list){ if(s.startsWith("F")){ result.add(s); } else{ break; }}如何在流中使用“break”?
2 回答

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
您可以使用takeWhile
Java9 中的運算符來完全滿足您的需要。它看起來是這樣的。
List<String> res = list.stream() .takeWhile(s -> s.startsWith("F")) .collect(Collectors.toList());

白板的微信
TA貢獻1883條經驗 獲得超3個贊
這是使用 Java 8 的一個選項:
AtomicBoolean keepAdding = new AtomicBoolean(true); list.stream() .peek(s -> keepAdding.set(keepAdding.get() && s.startsWith("F"))) .filter(s -> keepAdding.get());
還有另一種可能性,從評論中可以明顯看出上述方法不受青睞:
list.subList(0, list.indexOf(list.stream().filter(s -> !s.startsWith("F")) .findFirst() .orElse(list.get(list.size() - 1))));
添加回答
舉報
0/150
提交
取消