gpt4 book ai didi

java - 迭代 SortedMap 并删除条目

转载 作者:行者123 更新时间:2023-11-29 03:03:47 25 4
gpt4 key购买 nike

我有一个 SortedMap<Long, List<MyType>>我想删除 List<MyType>如果List<MyType>是空的,我也会删除 Long键。

在 Java 8 中是否有一个优雅的解决方案?

通过这段代码,我得到一个 ConcurrentModificationException .

SortedMap<Long, List<MyType>> dates = ...

for (final Long key : this.getDates().keySet()) {
for (final Iterator<MyType> iterator = this.getDates().get(key).iterator();
iterator.hasNext();) {
final MyType myType= iterator.next();
if (myType.getMarker().intValue() == marker.intValue()) {
iterator.remove();

if (this.getDates().get(key).isEmpty()) {
this.getDates().remove(key);
}
break;
}
}
}

最佳答案

第一位可以这样写:

for (List<MyType> list : dates.values()) {
list.removeIf(myType -> myType.getMarker().intValue() == marker.intValue());
}

第二位可以写成:

dates.values().removeIf(List::isEmpty);

这需要两次传递,但在我看来更容易理解(并且对性能的影响可能很小)。


用迭代器替代:

for (Iterator<List<MyType>> it = dates.values().iterator(); it.hasNext();) {
List<MyType> list = it.next();
list.removeIf(myType -> myType.getMarker().intValue() == marker.intValue());
if (list.isEmpty()) it.remove();
}

关于java - 迭代 SortedMap 并删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33240229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com