【发布时间】:2020-09-10 17:20:51
【问题描述】:
我需要从哈希图中的列表中删除一些元素。老方法有效。新方法行不通,似乎没有删除请求的元素。
以旧方式登录我从来没有得到“查找后!”,正如预期的那样。通过新方式,我获得了一些“追寻!” :(
老办法:
workingMarketCards.forEach((k, v) -> {
for (FixedPriceInsertion fpi : v) {
if (fpi.getMasterId() == oc.getMasterCardId()) {
System.out.println("found before!");
}
}
ArrayList<FixedPriceInsertion> toBeRemoved = new ArrayList<>();
for (FixedPriceInsertion fpi : v) {
if (fpi.getMasterId() == (long) (oc.getMasterCardId())) {
toBeRemoved.add(fpi);
}
}
for (FixedPriceInsertion fpi : toBeRemoved) {
v.remove(fpi);
}
for (FixedPriceInsertion fpi : v) {
if (fpi.getMasterId() == oc.getMasterCardId()) {
System.out.println("found after!");
}
}
});
新方法:
workingMarketCards.forEach((k, v) -> {
for (FixedPriceInsertion fpi : v) {
if (fpi.getMasterId() == oc.getMasterCardId()) {
System.out.println("found before!");
}
}
v.stream().filter(s -> s.getMasterId() == (long) (oc.getMasterCardId()));
for (FixedPriceInsertion fpi : v) {
if (fpi.getMasterId() == oc.getMasterCardId()) {
System.out.println("found after!");
}
}
});
为什么?我的代码有什么问题?
【问题讨论】:
-
.filter()不会从列表中删除项目,它“返回一个由该流中与给定谓词匹配的元素组成的流”。看.removeIf() -
在比较对象时也使用
.equals()而不是==。
标签: java arraylist lambda hashmap