Raj*_*ate 0 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" : (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
Run Code Online (Sandbox Code Playgroud)
第三个参数Collectors.toMap()是 merge 函数,该函数获取 的两个值Map,并返回一个“合并”值。这用于合并与同一键对应的多个值。
不适合将地图的值从“1”、“2”、“3”...转换为其他String值。
要将数值替换为Strings,您可以在值映射器中执行转换:
LinkedHashMap<String, String> Tmap =
users.stream()
.collect(Collectors.toMap(UserMst::getLoginId,
u -> convert(u.getTenantId()),
(x, y)-> x + ", " + y,
LinkedHashMap::new));
Run Code Online (Sandbox Code Playgroud)
其中convert是一个接受String诸如“1”并返回相应的 的方法String。
例如:
public static convert (String x)
{
return x.equals("1")?"Rocks":x.equals("2")?"Mocks":x.equals("3")?"Docs":x.equals("4")?"Pocks":"";
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以向类添加UserMst一个方法,该方法返回String与getTenantID()该实例对应的方法,然后只需编写:
LinkedHashMap<String, String> Tmap =
users.stream()
.collect(Collectors.toMap(UserMst::getLoginId,
UserMst::getTenantString,
(x, y)-> x + ", " + y,
LinkedHashMap::new));
Run Code Online (Sandbox Code Playgroud)