Java 8 比较两个列表,并使用Java8将匹配添加到对象的映射中

Java 8 比较两个列表,并使用Java8将匹配添加到对象的映射中,java-8,Java 8,我需要一些关于java8的帮助。基本上我有两个不同类型的列表。我需要比较两者并将其添加到地图中。这是我试过的代码。我被困在这里,需要帮助 Dto{ String name, String id, String address; } strList = dtoList.stream().map(Dto::getName()).distinct().collect(Collectors.toList()); Map<String,Object>

我需要一些关于java8的帮助。基本上我有两个不同类型的列表。我需要比较两者并将其添加到地图中。这是我试过的代码。我被困在这里,需要帮助

Dto{
     String name,
     String id,
     String address;
 }

 strList = dtoList.stream().map(Dto::getName()).distinct().collect(Collectors.toList());

   Map<String,Object> map= new HashMap<>();
      List<Dto> newList = newArrayList<>();
      List<Dto> dtoList = data1;
      List<String> strList  = data2;
     
        for(Dto dto: dtoList ){
           strList .stream().filter(x->x.equals(dto.getName()).findAny().ifPresent(y-> {
                newList.add(dto) // I need to add dto into list
         }
           map.put(x, newList);

        }.
Dto{
字符串名,
字符串id,
字符串地址;
}
strList=dtoList.stream().map(Dto::getName()).distinct().collect(Collectors.toList());
Map Map=newhashmap();
List newList=newArrayList();
列表dtoList=data1;
列表strList=data2;
对于(Dto Dto:dtoList){
strList.stream().filter(x->x.equals(dto.getName()).findAny().ifPresent(y->{
newList.add(dto)//我需要将dto添加到列表中
}
map.put(x,newList);
}.
将有一个对象列表——每个strList的newList。如何继续


提前感谢

您可以使用
收集器。groupingBy
Map
中收集
Dto
按名称分组,其中键是
name
,值是所有具有相同
名称的
Dto
。您不需要在
strList
中收集名称,因为此信息已经在
Dto中,您可以直接将其用于分组方式

Map<String, List<Dto>> map = dtoList.stream()
                                    .collect(Collectors.groupingBy(d -> d.getName()));
Map Map=dtoList.stream()
.collect(Collectors.groupingBy(d->d.getName());
更新:收集为
地图

Map Map=dtoList.stream()
.collect(收集器.groupingBy(d->d.getName(),
Collectors.collectionAndThen(Collectors.toList(),e->(Object)e));

你能展示一个输入和输出的示例吗?是的,我已经添加了它。你能提供一个可编译的代码吗?这真的很难理解。我需要比较两个列表,然后将其添加到映射中——dtoList和strList。你不需要像strList那样收集名称,因为这些信息已经包含在dto中,你可以使用它按na对dto进行分组me.Answer还更新了一些解释。我需要映射有字符串和对象。内部是的,它将是list。但是当从方法返回时,我需要保留映射以用于其他目的。其他一些源需要这样做format@user14288342更新了答案谢谢Rono。但是当我尝试执行时。collect(Collectors.groupingBy(d->d.getName(),它不是指向dtoList,而是指向object。因此我无法添加d->d.getName()。它说无法推断类型参数。
Map<String, Object> map = dtoList.stream()
        .collect(Collectors.groupingBy(d -> d.getName(), 
                  Collectors.collectingAndThen(Collectors.toList(), e -> (Object)e)));