Spe*_*ise -1 java java-8 java-stream
我想从列表中删除一个项目,如果它不是集合中的最后一个.
例如:
List<String> items = ....
Iterator<String> it = items.iterator();
while (it.hasNext() && items.size() > 1) {
String item = it.next();
if (condition(item)) {
it.remove();
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以通过在Java 8中使用流以更优雅的方式执行相同的操作?
如果您需要根据条件删除元素,除非它是列表中的最后一项,您可以使用removeIf()哪个:
删除此集合中满足给定谓词的所有元素.
给定谓词是项目满足条件的位置.但是,您需要首先确保不会删除所有项目removeIf()(这将导致删除列表中的每个元素).如果sublist()将删除所有元素,您可以使用除去最后一个元素之外的所有元素:
//If all the elements would be removed, use sublist to get every element but last one
//Clear sublist
if(items.stream().allMatch(e -> condition(e))) {
items.subList(0, items.size() -1).clear();
} else {
//else it is safe to directly call removeIf()
items.removeIf(e -> condition(e));
}
Run Code Online (Sandbox Code Playgroud)
或者为了确保condition(e)只检查一次,您可以执行以下操作:
items.subList(0, items.size() -1).removeIf(e -> condition(e));
if(items.size() > 1 && condition(items.get(items.size()-1))) {
items.remove(items.size()-1);
}
Run Code Online (Sandbox Code Playgroud)
(感谢@Holger的建议)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |