当前位置: 首页 > 知识库问答 >
问题:

使用java8[复制]合并对象

孟谭三
2023-03-14

我有一张这样的清单

    List<Objeto> myList = new ArrayList<Objeto>();
    Objeto o1 = new Objeto("1", "bbb");
    myList.add(o1);
    Objeto o2 = new Objeto("1", "rrrr");
    myList.add(o2);
    Objeto o3 = new Objeto("2", "eee");
    myList.add(o3);
    Objeto o4 = new Objeto("2", "wwww");
    myList.add(o4);
    Objeto o5 = new Objeto("3", "iiii");
    myList.add(o5);

其中Objecto是此类型的对象

class Objeto{
private String contentId;
private String address;

Objeto(String id, String address){
    this.contentId = id;
    this.address = address;
}

//接球手和接球手

}

我想将列表合并成如下的哈希图

(1, {"bbb","rrrr"})
(2, {"eee","wwww"})
(3, {"iiii"})

我可以使用java 8 lambda来实现它吗?或者通过任何其他方式?

非常感谢!

共有2个答案

穆展鹏
2023-03-14
package com.company;

import java.util.ArrayList;
import java.util.stream.Collectors;

public class Main {
public static class Objeto {
    private String contentId;
    private String address;

    Objeto(String id, String address) {
        this.contentId = id;
        this.address = address;
    }

    public String getContentId() {
        return contentId;
    }

    public String getAddress() {
        return address;
    }
}

public static void main(String[] args) {
    java.util.List<Objeto> myList = new ArrayList<Objeto>();
    Objeto o1 = new Objeto("1", "bbb");
    myList.add(o1);
    Objeto o2 = new Objeto("1", "rrrr");
    myList.add(o2);
    Objeto o3 = new Objeto("2", "eee");
    myList.add(o3);
    Objeto o4 = new Objeto("2", "wwww");
    myList.add(o4);
    Objeto o5 = new Objeto("3", "iiii");
    myList.add(o5);

    myList.stream().collect(
            Collectors.groupingBy(
                    Objeto::getContentId,
                    Collectors.mapping(
                            Objeto::getAddress,
                            Collectors.toList()))
    ).forEach((id, addresses) -> System.out.printf("(%s, {%s})\n", id, addresses.stream().collect(Collectors.joining(","))));
}
}

输出:

(1, {bbb,rrrr})
(2, {eee,wwww})
(3, {iiii})
夏兴平
2023-03-14

您可以使用收集器。groupingBy可按对象的ID和收集器对对象进行分组。映射将每个对象映射到其相应的地址:

Map<String,List<String>>
    map = myList.stream()
                .collect(Collectors.groupingBy(Objeto::getContentID,
                                               Collectors.mapping(Object::getAddress
                                                                  Collectors.toList())));
 类似资料:
  • 我有一个Java类,它有20个属性及其相应的getter和setter。还有两个对象列表:和。 使用Java 8: 但是我必须在哪个地方指定属性呢?是否应该重写和方法?

  • 问题内容: 我想在数据库中复制实体集合。我使用以下方法检索该集合: 现在,我想复制“类别”列表,并使用EntityManager保留它。我正在使用JPA /hibernate。 更新 在知道如何分离我的实体之后,我需要知道要分离什么:当前代码: 这引发了异常。 我认为他想重新加载类别,因为我已经将它们分离了。我现在该怎么办? 问题答案: 亚伦·迪吉拉(AaronDiguila)的答案是去这里的方式

  • 我需要将regex列表应用于字符串,所以我想使用java8 map reduce: 实际上,这段代码可能不是很漂亮,但它很有效。我知道这是无法并行的,对我来说是可以的。 现在我的问题是:Java8(或更高版本)是否有机会写出更优雅的东西?我的意思是避免添加无用的组合器功能。

  • 我有两个(或更多)

  • 假设我有一个Foo对象列表。Foo上有一个属性,我必须使用它从数据源中获取Bar对象。然后我必须将每个bar对象映射回我得到bar的原始Foo对象。 我的尝试如下:

  • 图表视图 该视图直观地显示发布服务器及其订阅服务器的层次结构和关系。将鼠标悬停在订阅服务器上以显示其同步状态。 实例块和箭头以颜色表示复制的不同状态。 绿色块表示服务器已启动(稳定)。 红色块表示服务器已关闭。 绿色箭头表示事务复制已启动,并且订阅服务器与其发布服务器保持同步。 红色箭头表示事务复制已关闭(断开),并且订阅服务器可能未能与其发布服务器保持同步。 黑色箭头表示合并复制。 【提示】使用