java - 使用 java8 合并对象

标签 java lambda java-8

<分区>

我有一个这样的列表

    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;
}

//getter和setter

我想像这样把列表合并成一个HashMap

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

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

非常感谢!

最佳答案

您可以使用 Collectors.groupingBy 按对象的 ID 对对象进行分组,并使用 Collectors.mapping 将每个 Objeto 映射到其对应的地址:

Map<String,List<String>>
    map = myList.stream()
                .collect(Collectors.groupingBy(Objeto::getContentID,
                                               Collectors.mapping(Object::getAddress
                                                                  Collectors.toList())));

关于java - 使用 java8 合并对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45859893/

相关文章:

java - android HttpClient 加载许多小缩略图

ruby - 如何将 lambda 绑定(bind)到 Ruby 中的散列?

c# - 将属性从反射传递到表达式

Java 转换为 Double

java - 不支持 AWS SAM CLI java8 运行时

java - 找不到符号变量 main

Java swing 在关闭时保存选项卡

c# - 为什么 VB 中的 lambda 表达式与 C# 中的不同?

javadoc : error - invalid flag: -Xdoclint:none, 当我使用 java 7 时,它在 java 8 中有效

java - 如何从另一个类获取调用者方法的注释