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

如何使用Java 8将LinkedHashMap列表转换为自定义对象列表

涂飞航
2023-03-14

我们如何转换列表

示例:列表

这里的名称和名称都是LinkedHashmap键。如果你在IDE中复制下面的片段,你可以更好地理解这个列表

List<LinkedHashMap> list = new ArrayList<>();
LinkedHashMap<String, String> linkedHashMap1 = new LinkedHashMap<>((Map.of("name","David", "designation","Senior Software Engineer")));
LinkedHashMap<String, String> linkedHashMap2 = new LinkedHashMap<>((Map.of("name","Alex", "designation","Software Engineer")));
LinkedHashMap<String, String> linkedHashMap3 = new LinkedHashMap<>((Map.of("name","Jessi","designation","Lead")));
LinkedHashMap<String, String> linkedHashMap4 = new LinkedHashMap<>((Map.of("name","Martin","designation","Manager")));

list.add(linkedHashMap1);
list.add(linkedHashMap2);
list.add(linkedHashMap3);
list.add(linkedHashMap4);
System.out.println(list);

需要转换以上列表

Class Employee {
String name;
String designation;
}

预期输出:

[Employee(name = David, designation = Senior Software Engineer), 
Employee(name = Alex, designation = Software Engineer), 
Employee(name = Jessi, designation = Lead),
Employee(name = Martin, designation = Manager)]      

共有2个答案

周辰沛
2023-03-14

使用streams,您可以使用以下代码,前提是Employe类有一个具有此签名的构造函数:public Employe(字符串名称,字符串名称)。

List<Employe> customList= list.stream()
    .flatMap(map -> map.entrySet().stream())
    .map(entry -> new Employe(entry.getKey(), entry.getValue()))
    .toList();
郏兴贤
2023-03-14

在源列表上创建一个流。并使用映射到键"name""指定"的值将列表中的每个映射转换为员工的实例。

public static void main(String[] args) {
    List<Map<String, String>> source = List.of(
            Map.of("name","David", "designation","Senior Software Engineer"),
            Map.of("name","Alex", "designation","Software Engineer"),
            Map.of("name","Jessi","designation","Lead"),
            Map.of("name","Martin","designation","Manager"));

    List<Employee> result = source.stream()
            .map(map -> new Employee(map.get("name"), map.get("designation")))
            .collect(Collectors.toList());

    result.forEach(System.out::println);
}

输出

Employee{name='David', designation='Senior Software Engineer'}
Employee{name='Alex', designation='Software Engineer'}
Employee{name='Jessi', designation='Lead'}
Employee{name='Martin', designation='Manager'}

注:

  • 将对象存储为地图不是一种好做法。在您的示例中,没有什么可以帮您避免输入错误,您将得到一个属性值而不是一个null
 类似资料:
  • 我有以下格式的列表 如何根据其键找到值,例如我需要第3行的名称...以及如何根据行对其进行排序

  • 问题内容: 我想使用Java 8技巧在一行中执行以下操作。 给定此对象定义: 和a ,我想得到a ,它是第一个列表中所有s对象的列表- 顺序相同。 我可以使用Java中的循环来做到这一点,但我相信Java8中应该有一个单行lambda可以做到这一点。我无法在线找到解决方案。也许我没有使用正确的搜索词。 有人可以为这种转换建议一个lambda或另一种线吗? 问题答案: 这应该可以解决问题: 也就是说

  • 我可以在Java中使用循环来实现这一点,但我认为在Java8中应该有一个一行程序lambda来实现这一点。我无法在网上找到解决方案。也许我没有使用正确的搜索词。 有人能为这个转换提出一个lambda或另一个一行程序吗?

  • 我正在查看的文档,我看到了方法,但无法直接转到 是否有方法将转换为?

  • 问题内容: 我正在使用Jersey为服务器组件创建REST Web服务。 我要在列表中序列化的带有JAXB注释的对象如下所示: 我有一个REST资源来检索一个看起来像这样的发行版: 我还有一个REST资源来检索所有发行版的列表,如下所示: 我使用ContextResolver自定义JAXB序列化,当前配置如下: REST资源和上下文解析器都可以使用。这是第一个输出的示例: 这正是我想要的。这是列表

  • 如何使用stream转换下面的代码而不使用for each循环。 getAllSubjects()返回所有列表,每个主题都有。所有列表应合并为。 需要从中获取 对象模型: