java - Left Join 用于 Java 中的 2 个对象列表

标签 java lambda left-join

<分区>

我有 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”,它将连接 list1list2 中的所有对象并创建另一个 List list3 ,其中 Object3 具有来自 Object1Object2

的所有字段

我有大量数据,所以该方法应该非常快。 以及关于如何在 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 将包含您的结果。

关于java - Left Join 用于 Java 中的 2 个对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49072229/

相关文章:

java - 如何禁用DEBUG日志

java - Java 可以写入/读取已释放的堆外内存吗?

java - 订阅两个不同的 Observable 和 onNext?

c# - 手动将 LINQ 查询语法转换为 Lambda 表示法

sql-server - 即使记录不存在也返回行 LEFT OUTER JOIN

java - 向后显示字符串

c++ - 编译器如何从Deleted-default-ctor lambda生成闭包?

java - 捕获 C++ lambda 表达式错误中的 JNIENV*

sql - 根据附近的时间戳连接两个表

sql - 当 COUNT 另一个表时,从表中选择 2 行