Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为Collector.toMap()编写合并函数_Java_Collections_Java Stream - Fatal编程技术网

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