如何通过其参数查找和收集要映射的对象?

问题描述 投票:0回答:1

给出枚举:

enum Type {
  PRIMARY,
  SECONDARY
}

和具有相同参数(type)的两个不同对象集:

class OldObject {
  Long id;
  Type type;
}

class NewObject {
  Long id;
  String title;
  Type type;
}

...看起来像:

Set<OldObject> ...
Set<NewObject> ...

Beeing对带有CollectorsGroupings的Stream API感到困惑,我无法完成<< Map [OldObject,NewObject],并按Type分组。我能够保证两套啤酒都已满,并且能够找到对。我以为我可以从enum的流开始(但不知道这是否是一个很好的方法):

Map<OldObject, NewObject> pairs = Optional.of(Schema.values())...
java lambda stream java-stream
1个回答
0
投票
请注意,如果其中一个集合中不包含某些枚举,则此方法可能会出错,因为地图收集器不支持空值。您可以通过在发生这种情况之前添加过滤器调用来防止这种情况:

Map<OldObject, NewObject> pairs = Arrays .stream(Type.values()) .filter(oldObjectSet::contains) .filter(newObjectSet::contains) .collect(Collectors.toMap(oldObjectMap::get, newObjectMap::get))

© www.soinside.com 2019 - 2024. All rights reserved.