在computeIfPresent之后如何使用forEach

我有这段代码,我想forEachcomputeIfpresent函数后使用。主要是,如果找到了键,那么我们应该遍历值(列表),并获取每个条目并将其添加到另一个列表中。知道我该怎么做吗?

List<Long> myArrayList = new ArrayList();
Map<Long, Set<Long>> myMap = new HashMap();

Set<Long> mySet = MyMap().get(id);
if (mySet != null)
{
    for (Long ex : mySet)
    {
          myArrayList.add(ex);
    }
}

-->??
myMap.computeIfPresent(id, (key, value) -> value.forEach(ex -> myArrayList.add(ex)));

回答

computeIfPresent用于更改HashMap给定键下的值(id在您的情况下)。这意味着不允许这样的操作,因为通过forEach在 key:value 对上运行,您不会为地图提供任何新的映射值

你可以做的是

myMap.computeIfPresent("a", (k, v) -> {
((Set<Long>)v).forEach(e -> myArrayList.add(e));
return v;
});

但它看起来很糟糕并且违反了computeIfPresent方法的目的

你应该使用相当传统的方法

if (myMap.containsKey(id)) {
myArrayList.addAll(myMap.get(id));
}

或使用 Optional

Optional.ofNullable(map.get(id)).ifPresent(set ->
myArrayList.addAll((Set<Long>)set)
);

...但这更易读吗?:)


以上是在computeIfPresent之后如何使用forEach的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>