[英]How to Convert List<Map<String, Object>> to List<Map<String, String>>
[英]How to convert Object list into a map of <String, List<String>>?
我有一個用戶列表
Collection<User> userList = groupManager.getUserList(groupName);
不知道 Java-Streams API 好,我想將 map 轉換為 map,如下所示:密鑰將是用戶密鑰,值將是用戶對象的其他屬性列表。
Map<String, List<String>> userDsiplayData = userList.stream()
.collect(Collectors.toMap(User::getKey, **.......**))
我試圖用Arrays.asList(User::getUsername(), User::getDisplayName(), User::getEmail())
或類似的結構替換 **..... ** 但我似乎無法得到它工作。
只需使用 lambda:
Map<String, List<String>> userDsiplayData = userList.stream()
.collect(Collectors.toMap(User::getKey,
user -> List.of(user.getUsername(), user.getDisplayName(), user.getEmail()))
順便說一句,您的Arrays.asList(User::getUsername(), User::getDisplayName(), User::getEmail())
部分是錯誤的 - 您嘗試返回方法句柄列表,而不是映射 function (除了它在語法上不正確的事實 - 括號不屬於那里)。
在您的情況下,收集應該是這樣的:
.collect(Collectors.toMap(
User::getKey,
u -> Arrays.asList(u.getUsername(), u.getDisplayName(), u.getEmail())));
您還可以創建一個自定義方法,該方法返回用戶 class 中的預期字段列表:
public class User {
private String key;
private String username;
private String displayName;
private String email;
// getters setters
public List<String> getUserInfo() {
return Arrays.asList(username, displayName, email)));
}
}
然后您可以使用如下方法引用來調用它:
.collect(Collectors.toMap(User::getKey, User::getUserInfo));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.