给定枚举:
enum Type {
PRIMARY,
SECONDARY
}
以及具有相同参数(类型)的两个不同对象集:
class OldObject {
Long id;
Type type;
}
class NewObject {
Long id;
String title;
Type type;
}
...看起来像:
Set<OldObject> ...
Set<NewObject> ...
对带有收集器和分组的Stream API感到困惑,我无法使用按类型分组的Map[OldObject, NewObject]来完成。我可以保证两套啤酒都是满的,并且我能够找到成对的。我认为我可以从枚举流开始(但不知道这是否是一个好的方法):
Map<OldObject, NewObject> pairs = Optional.of(Schema.values())...
最佳答案
如果你真的想要 Streams,最简单的方法就是选择类似的东西
Map<Type, OldObject> oldObjectMap = oldObjectSet.stream().collect(Collectors.toMap(OldObject::getType, Function.identity()))
Map<Type, NewObject> newObjectMap = newObjectSet.stream().collect(Collectors.toMap(NewObject::getType, Function.identity()))
Map<OldObject, NewObject> pairs = Arrays
.stream(Type.values())
.collect(Collectors.toMap(oldObjectMap::get, newObjectMap::get))
请注意,如果某个集合中不存在某些枚举,则此方法可能会遇到错误,因为 map 收集器不支持空值。 您可以通过在发生这种情况之前添加过滤器调用来防止这种情况发生:
Map<OldObject, NewObject> pairs = Arrays
.stream(Type.values())
.filter(oldObjectSet::contains)
.filter(newObjectSet::contains)
.collect(Collectors.toMap(oldObjectMap::get, newObjectMap::get))
关于java - 如何通过其参数查找并收集要映射的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60227856/