我有一个这样的名单
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;
}//Getters和Setters
}
我想把这个列表合并成这样的HashMap
(1, {"bbb","rrrr"})
(2, {"eee","wwww"})
(3, {"iiii"})我可以使用java 8 lambda来实现它吗?或者有别的办法吗?
非常感谢!
发布于 2017-08-24 11:04:30
您可以使用Collectors.groupingBy按其ID对对象进行分组,并使用Collectors.mapping将每个Objeto映射到相应的地址:
Map<String,List<String>>
map = myList.stream()
.collect(Collectors.groupingBy(Objeto::getContentID,
Collectors.mapping(Object::getAddress
Collectors.toList())));发布于 2017-08-24 11:12:28
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})https://stackoverflow.com/questions/45859893
复制相似问题