我有 2 个 Java 对象列表
List<Object1> list1
List<Object2> list2
Object1 has fields:
- fieldA
- fieldB
- fieldC
- fieldsD
Object2 has fields:
- fieldB
- fieldE
- fieldF
因此,Object1 和 Object2 都有相同的字段“fieldB”。
我想做的是实现某种“LEFT JOIN”,它将连接 list1 和 list2 中的所有对象并创建另一个 List list3 ,其中 Object3 具有来自 Object1 和 Object2
的所有字段
我有大量数据,所以该方法应该非常快。
以及关于如何在 Java 中实现它的建议?
您可以尝试使用Java流的并行操作来加快速度:
List<Object3> list3 = list1.stream().parallel()
.map( o1 -> merge( new Object3(), o1 ) )
.collect( Collectors.toList() );
Map<Object, Object3> map = list3.stream().parallel()
.collect( Collectors.toConcurrentMap( Object3::getFieldB, Function.identity() ) );
list2.stream().parallel().forEach( o2 -> {
Object3 o3 = map.get( o2.getFieldB() );
if (o3 != null) merge(o3, o2);
} );
Object3 merge(Object3 o3, Object1 o1){...}
Object3 merge(Object3 o3, Object2 o2){...}
list3
将包含您的结果。