示例list:
List<User> userList = new ArrayList<>();
userList.add(new User(1, "小花"));
userList.add(new User(1, "小草"));
原来代码 报错版本:
Map<Integer, String> map = userList.stream().collect(
Collectors.toMap(User::getId, User::getName))
直接看答案 正确版本1:
k->v 1对1
增加 (k, v) -> k)
结果:{“1”:“小花”}
Map<Integer, String> map2 = userList.stream().collect(
Collectors.toMap(User::getId, User::getName, (k, v) -> k));
直接看答案 正确版本2:
k->v 允许1对多
增加 (k, v) -> k + "," + v
结果:{“1”:“小花,小草”}
Map<Integer, String> map3 = userList.stream().collect(
Collectors.toMap(User::getId, User::getName, (k, v) -> k + "," + v));
————————————————————————————————
————————————————————————————————
慢慢查看源代码 分析原因
原来代码 报错版本:
可以看到我们参数仅仅是: key ,value
Map<Integer, String> map = userList.stream().collect(
Collectors.toMap(User::getId, User::getName))
调用源码方法:
找到了报错位置:
源码提供解决方法:
示例代码 copy本地运行
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
userList.add(new User(1, "小花"));
userList.add(new User(1, "小草"));
// Map<Integer, String> map = userList.stream().collect(Collectors.toMap(User::getId, User::getName));
Map<Integer, String> map2 = userList.stream().collect(Collectors.toMap(User::getId, User::getName, (k, v) -> k));
Map<Integer, String> map3 = userList.stream().collect(Collectors.toMap(User::getId, User::getName, (k, v) -> k + "," + v));
// System.out.println(JSON.toJSON(map));
System.out.println(JSON.toJSON(map2));
System.out.println(JSON.toJSON(map3));
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class User {
Integer id;
String name;
}