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

将列表映射到地图内的DTO-java

慕项明
2023-03-14

我有这样的收藏:<代码>地图

所以返回将是:Map

最简单快捷的方法是什么?我已经用流检查了几种方法,但没有一种产生我预期的结果。谢谢


共有3个答案

缪远航
2023-03-14

您可以创建一个新的HashMap,将旧键放入新值(值将是基于原始对象创建的Dto)

class Person {
String name ;
public Person(String s) {
    this.name=s;
}
@Override
public String toString() {
    // TODO Auto-generated method stub
    return name;
}
}

class PersonDto {
String name;
public PersonDto(Person p) {
    this.name=p.name+"Dto";
}
@Override
public String toString() {
    // TODO Auto-generated method stub
    return name;
}
}

public class Main {
public static void main(String[] args) {
// your initial HashMap 
    Map<Integer, List<Person>> map = new HashMap<>();
    Person x =new Person("X");
    Person y =new Person("Y");
    List<Person> lst1 = new ArrayList<>();
    lst1.add(x);
    List<Person> lst2 = new ArrayList<>();
    lst2.add(y);
    
    map.put(1, lst1);
    map.put(2, lst2);
    // create a new HashMap<Integer, List<MyObjectDto>> 
    Map<Integer, List<PersonDto>> mapDto = new HashMap<>();
    // Simply use forEach 
    // in the next line instead of "new PersonDto(e)" you will put your mapping method 
    map.forEach((k,v)->{
        mapDto.put(k, v.stream().map(e-> new PersonDto(e)).collect(Collectors.toList()));
        
    });
    
    System.out.println(map);
    System.out.println(mapDto);
    
    }
}

输出:

{1=[X],2=[Y]}

{1=[XDto],2=[YDto]}

岑畅
2023-03-14
匿名用户

使用for循环和流:

private Map<Integer, List<MyObjectDto>> mapNestedListToDto(Map<Integer, List<MyObject>> collection) {
    Map<Integer, List<Dto>> collectionWithDtos = new HashMap<>();
    for (Integer i : collection.keySet()) {
      List<Dto> dtos = collection.get(i).stream().map(myObject -> mappingFunction(myObject)).collect(Collectors.toList());
      mapped.put(i, dtos);
    }

    return collectionWithDtos;
}

其中<code>mappingFunction()的实例实际转换为<code>MyObject dto的实例的方法。

姜嘉良
2023-03-14

这是使用以下简单调用的一种方法

Map<Integer, List<MyObjectDto>> mappedCollection = collection.entrySet().stream()
        .collect(Collectors.toMap(
                Map.Entry::getKey, 
                e -> e.getValue()
                      .stream()
                      .map(myObject -> new MyObjectDto())  // mapping here
                      .collect(Collectors.toList())));

基本上,您希望将其收集到具有相同键的相同结构的映射中。流式传输条目集 集

  • 键是相同的键:条目-

只要我们不知道要映射的对象的结构,您就必须自己将其添加到带有注释的行中。

 类似资料:
  • 问题内容: 我正在使用Spring MVC框架编写简单的博客Web应用程序。我愿意为我的应用添加图层。 我决定使用ModelMapper框架从对象转换为视图中使用的对象。 我只有一个问题。在我的主页上,我正在显示博客中的帖子列表。在我看来,这只是(实体)对象的列表。我想更改它以将对象列表传递给我的视图。有没有什么办法来映射的对象的单方法调用的对象?我当时在考虑编写将对此进行转换的转换器,但是我不确

  • 我的域名: 我的DTO: 我的地图绘制程序如下所示: 但是,我得到了以下错误: 目标名称“Framework.system”的类型Framework中的未知属性“system”。你是说“框架外部化”吗?目标名称为“Framework.availability”的Framework类型中的未知属性“availability”。你是说“框架外部化”吗?

  • 我已经用MapStruct 1.1工作了几天,但还没有达到我所需要的。 我想做的是:我想将JPA实体映射到DTO,以便在Primefaces项目中实现更好的属性视图绑定。 所以我有我的实体如下: 病人JAVA 人JAVA 我想把这些实体画成这样: 耐心等待。JAVA 潘松多。JAVA 我编写了Mapper类和一个实用程序,就像GitHub上的官方示例中描述的那样(https://github.co

  • 我正在尝试使用AutoMapper在LLBLGen实体和DTO之间创建映射。 我的DTO如下所示: ParentEntity包含一个与DTO列表同名的ChildCollection和一个Id(需要忽略其他LLBL字段)。因此,当ParentEntity映射到父d to时,它也应该将ChildCollection映射到一个子列表。 这就是我到目前为止得到的: 这会导致Id被映射,但List的计数为0

  • 给定: 我想把所有的车都标出来。将轮胎分为单独的轮胎板。我知道我可以做一个

  • 在我的服务中,我试图将实体映射到,但是由于方法返回(),我不能像通常用于那样进行如下转换。它为方法抛出“不能在'iterable'中解析方法'stream'”错误。 那么,如何将这个实体映射到?