Java 如何为Collector.toMap()编写合并函数
这里的Java 如何为Collector.toMap()编写合并函数,java,collections,java-stream,Java,Collections,Java Stream,这里的UserMst是对象,users是我从中获取LoginId和TenantId的列表 LinkedHashMap<String, String> Tmap = users.stream().collect(Collectors.toMap( UserMst::getLoginId, UserMst::getTenantId, (x, y)-> ((x=="1") ? "Rocks" :
UserMst
是对象,users
是我从中获取LoginId和TenantId的列表
LinkedHashMap<String, String> Tmap = users.stream().collect(Collectors.toMap(
UserMst::getLoginId, UserMst::getTenantId,
(x, y)-> ((x=="1") ? "Rocks" : (x=="2")
? "Mocks" : (x=="3")
? "Docs" : (x=="4")
? "Pocks" : "")
+ " , " + ( (y=="1") ? "Rocks": (y=="2")
? "Mocks": (y=="3")
? "Docs" : (y=="4")
? "Pocks": ""),
LinkedHashMap::new));
///////////////////
LinkedHashMap<String, String> Tmap =
users.stream().collect(
Collectors.toMap( UserMst::getLoginId, UserMst::getTenantId,
(x, y)-> x + ", " + y, LinkedHashMap::new));
```
It gives output as answer:: rajat=1,2,3 dave=1,2 milind=2,3
I just need these 1,2,3,4 replaced with strings
LinkedHashMap Tmap=users.stream().collect(Collectors.toMap(
UserMst::getLoginId,UserMst::getTenantId,
(x,y)->(x==“1”)?“岩石”:(x==“2”)
“模拟”:(x==“3”)
“文件”:(x==“4”)
?“麻子”:“)
+“,”+((y==“1”)?“岩石”:(y==“2”)
“模拟”:(y==“3”)
“文件”:(y==“4”)
“麻子”:“),
LinkedHashMap::new));
///////////////////
LinkedHashMapTMap=
users.stream().collect(
toMap(UserMst::getLoginId,UserMst::getTenantId,
(x,y)->x+”,“+y,LinkedHashMap::new”);
```
它给出的输出为:answer::rajat=1,2,3 dave=1,2 milind=2,3
我只需要用字符串替换这些1,2,3,4
收集器的第三个参数是merge函数,该函数获取映射的两个值,并返回一个“合并”值。这用于合并与同一键对应的多个值
不适合将地图的值从“1”、“2”、“3”转换为,。。。到其他字符串
s
要将数值替换为String
s,可以在值映射器中执行转换:
LinkedHashMap<String, String> Tmap =
users.stream()
.collect(Collectors.toMap(UserMst::getLoginId,
u -> convert(u.getTenantId()),
(x, y)-> x + ", " + y,
LinkedHashMap::new));
或者,您可以向UserMst
类中添加一个方法,该方法返回与该实例的getTenantID()
对应的String
,然后简单地编写:
LinkedHashMap<String, String> Tmap =
users.stream()
.collect(Collectors.toMap(UserMst::getLoginId,
UserMst::getTenantString,
(x, y)-> x + ", " + y,
LinkedHashMap::new));
LinkedHashMap Tmap=
users.stream()
.collect(Collectors.toMap)(UserMst::getLoginId,
UserMst::getTenantString,
(x,y)->x+“,”+y,
LinkedHashMap::new));
您知道可以在lambdas中使用块吗?没有必要把所有的东西都放在一个语句中,就像这个超级复杂的三元语句一样。像(x,y)->{…这里的一些普通代码…}
您的合并函数没有多大意义。您可以显示示例输入和输出吗?此外,您将字符串与==进行比较,这是错误的。如何为集合的键值映射器添加条件。映射将详细信息直接放在问题中,而不是放在注释中,它们在这里是不可读的。我只想在回答中添加mergeFunction
toMap()中的参数
method确实如此-只是为了解释为什么OPs代码不起作用。@Eran请重新准备好整个问题!!!我把它作为一个输出,我需要在存储它之前对它进行手动操作,以映射我是如何操作的?RajatDiwate我知道你想要的是rajat=Rock,Mock,Docs,而不是rajat=1,2,3。这就是我的答案。你知道,你可以使用switch
而不是String
(不过,即将推出的switch
表达式会让它变得更好)。值得一提的是另一种方法,groupingBy(UserMst::getLoginId,LinkedHashMap::new,mapping(UserMst::getTenantString,joining(“,”))
LinkedHashMap<String, String> Tmap =
users.stream()
.collect(Collectors.toMap(UserMst::getLoginId,
UserMst::getTenantString,
(x, y)-> x + ", " + y,
LinkedHashMap::new));