我正在用Stream学习Java,我有一张地图
你可以这样做:
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
中工作,这个答案和你的模型相似,更容易理解。
请参考这个链接https://www.baeldung.com/java-merge-maps,它会帮助你。
您可以使用key mapperMap将
。对于值映射器,您可以获取条目值列表,然后将map1
的条目流式传输,并使用Collectors.toMap
进行收集。条目::getKeystream
从Client
映射到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。 这是我目前掌握的代码。
我有这样的收藏:<代码>地图 所以返回将是: