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

如何使用Java流将地图映射到另一个地图?

幸鸿轩
2023-03-14

我正在用Stream学习Java,我有一张地图


共有3个答案

左丘恩
2023-03-14

你可以这样做:

Customer c1 = new Customer("İsmail", "Y.");
Customer c2 = new Customer("Elvis", "?.");
        
Map<String, List<Customer>> customerList = new HashMap<>();
customerList.put("U1", Arrays.asList(c1));
customerList.put("U2", Arrays.asList(c1, c2));
        
Map<String, List<CustomerObj>> customerObjList = customerList
        .entrySet().stream().collect(
                Collectors.toMap(Map.Entry::getKey,
                        entry -> entry.getValue().stream()
                                .map(CustomerObj::new)
                                // or .map(c -> new CustomerObj(c))
                                .collect(Collectors.toList())
                )
        );
    }
java prettyprint-override">private static class Customer {

    private String firstName;
    private String lastName;

    public Customer(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}

private static class CustomerObj {

    private String fullName;

    public CustomerObj(Customer customer) {
        this.fullName = String.join(" ",
                customer.getFirstName(), customer.getLastName()
        );
    }

    public String getFullName() {
        return fullName;
    }
}

@双簧管的答案在Java16中工作,这个答案和你的模型相似,更容易理解。

南宫炜
2023-03-14

请参考这个链接https://www.baeldung.com/java-merge-maps,它会帮助你。

郭易安
2023-03-14

您可以使用key mapperMap将map1的条目流式传输,并使用Collectors.toMap进行收集。条目::getKey。对于值映射器,您可以获取条目值列表,然后将streamClient映射到CustomObj,最后收集到List

下面是使用整数代替客户String代替Customer Obj的示例:

Map<String, List<Integer>> map1 = Map.of(
        "A", List.of(1, 2), 
        "B", List.of(3, 4), 
        "C", List.of(5, 6));
    
Map<String, List<String>> map2 = map1.entrySet().stream().collect(
        Collectors.toMap(Map.Entry::getKey, 
                entry -> entry.getValue().stream()
                        .map(String::valueOf).toList()));
 类似资料:
  • 问题内容: 我需要将Java转换为的实例(包括地图内容) 我应该怎么做才能使此代码可编译? 问题答案: 从Collectors.toMap(…)javadoc: 例如:

  • 我有一连串的弦和空值 我想将它简化为另一个流,其中任何非空字符串序列连接在一起,即像 我发现的第一种方法是创建收集器,首先将完整的输入流减少到具有所有连接字符串列表的单个对象,然后从中创建新流: 但在这种情况下,在任何使用前,如果str2,甚至作为str2。findFirst(),将完全处理输入流。它需要耗费时间和内存的操作,并且在来自某个生成器的无限流上,它将根本不工作 另一种方法-创建将保持中

  • 我需要将Java转换为的实例(包括映射内容) 我应该用什么来代替来使此代码可编译?

  • 问题内容: 我刚刚开始研究Java 8,并尝试了lambda,我认为我想尝试重写最近写的一件非常简单的东西。我需要将字符串映射到列映射转换为另一个字符串映射到列映射,其中新映射中的列是第一个映射中列的防御性副本。列具有复制构造函数。到目前为止,我最接近的是: 但我敢肯定,必须有更好的方法来完成这项工作,对于您的建议我将不胜感激。 问题答案: 您可以使用收集器:

  • 我有两个不同标题的csv。 假设CSV1有一、二、三、四个标题,我想创建一个有五、六、七、八个标题的csv。 我很难编写代码来打开第一个CSV,然后创建第二个CSV。 这是我目前掌握的代码。

  • 我有这样的收藏:<代码>地图 所以返回将是: