首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java8合并对象

使用java8合并对象
EN

Stack Overflow用户
提问于 2017-08-24 11:01:05
回答 2查看 4.3K关注 0票数 1

我有一个这样的名单

代码语言:javascript
复制
    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是这种类型的对象。

代码语言:javascript
复制
class Objeto{
private String contentId;
private String address;

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

//Getters和Setters

}

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

代码语言:javascript
复制
(1, {"bbb","rrrr"})
(2, {"eee","wwww"})
(3, {"iiii"})

我可以使用java 8 lambda来实现它吗?或者有别的办法吗?

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-24 11:04:30

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

代码语言:javascript
复制
Map<String,List<String>>
    map = myList.stream()
                .collect(Collectors.groupingBy(Objeto::getContentID,
                                               Collectors.mapping(Object::getAddress
                                                                  Collectors.toList())));
票数 4
EN

Stack Overflow用户

发布于 2017-08-24 11:12:28

代码语言:javascript
复制
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(","))));
}
}

输出:

代码语言:javascript
复制
(1, {bbb,rrrr})
(2, {eee,wwww})
(3, {iiii})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45859893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档