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

标签 java collections java-8 java-stream

我们如何使用 Java 8 Streams 将 List 转换为自定义对象列表 (List)。

示例:列表

这里的name和designation都是LinkedHashmap的key。如果您在 IDE 中复制以下代码片段,您可以更好地理解此 List

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);

需要将上面的 List 转换为 List 其中 Employee 类具有以下两个字段:

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)]      

最佳答案

在源列表上创建流。并使用映射到键 "name""designation"的值将列表中的每个 map 转换为 Employee 的实例.

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'}

注意:

  • 对象存储为 map 并不是一个好的做法。在您的示例中,没有什么可以帮助您避免拼写错误,您将得到 null 而不是属性值。
  • 不要删除一般信息。

关于java - 如何使用 Java 8 将 LinkedHashMap 列表转换为自定义对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71761083/

相关文章:

javascript - 使用 Java Servlet 的 SweetAlert

java - 如何检查对象是否实现了特定的接口(interface),而不是这个接口(interface)的后代,在 Java 中

c# - 返回 IQueryable 或 IEnumerable 会发生什么?

java - TreeMap java 实现 - 放入第一个元素

java - Java 8 的字符串重复数据删除功能

java - 在 IntelliJ IDEA 中,如何创建以当前文件作为参数执行 shell 脚本的键绑定(bind)?

java - Payara 服务器 5.192 : cannot start with JDK11 on IntelliJ

objective-c - 如何为 NSDictionary 实现自定义键

java - 意外的 Java 功能接口(interface)转换

java - 并行流和 forkjoinpool 在生产中使用安全吗?