字符串例子:
public void main()
{
// 初始化流
List<String> list = Stream.of("1","1","2","3","4","4","4","5","6","7")
// 收集 Collectors.toMap(map的key[Function.identity()表示自己本身], map的value, 当key重复值的处理[我这里选择让value相加])
.collect(Collectors.toMap(Function.identity(), s -> 1, Integer::sum))
// map 转 entrySet
.entrySet()
// 继续转流
.stream()
// 筛选只出现一次的元素
.filter(entry -> entry.getValue() == 1)
// 获取key
.map(Map.Entry::getKey)
// 统计只出现一次的元素
.collect(Collectors.toList());
// [2, 3, 5, 6, 7]
System.out.println(list);
}
User对象例子:
// User类
public class User implements Serializable
{
private String userName;
private Integer age;
private String sex;
private String phone;
// 省略 get set....
public static List<User> getUsers()
{
List<User> users = new ArrayList<User>();
users.add(new User("小胖", 15, "男", "13812345671"));
users.add(new User("小白", 18, "女", "13812345672"));
users.add(new User("小黑", 38, "男", "13812345673"));
users.add(new User("阿胖", 25, "女", "13812345674"));
users.add(new User("阿12", 25, "女", "13812345674"));
return users;
}
}
public void main()
{
Map<Integer, List<User>> list = User.getUsers().stream()
.collect(Collectors.toMap(User::getAge, user -> new ArrayList<User>() {{add(user);}}, (list1, list2) ->
{
list1.addAll(list2);
return list1;
}))
.entrySet()
.stream()
// 筛选只出现一次的元素
.filter(entry -> entry.getValue().size() > 1)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
// {25=[User{userName='阿胖', age=25, sex='女', phone='13812345674'}, User{userName='阿12', age=25, sex='女', phone='13812345674'}]}
System.out.println(list);
}