说明
本文简单记录流式处理遇到的问题
处理对象集合
对象结构
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
//中文名
private String nameZh;
//英文名
private String nameEn;
//日文名
private String nameJp;
//邮箱号集合
private List<String> emailList;
}
将对象多个属性取到集合中
public static void main(String[] args) {
UserDto u1 = new UserDto("张三","zhangsan","zs", Arrays.asList("zhangsan@qq.com","zhangsan@gmail.com"));
UserDto u2 = new UserDto("李四","lisi","zs", Arrays.asList("lisi@qq.com","lisi@gmail.com"));
getMutipleAttribute(Arrays.asList(u1,u2));
}
private static void getMutipleAttribute(List<UserDto> userDtoList){
List<String> result = userDtoList.stream().map(userDto -> {
Set<String> set = new HashSet<>();
set.add(userDto.getNameZh());
set.add(userDto.getNameEn());
set.add(userDto.getNameJp());
return set;
}).flatMap(Collection::stream).distinct().collect(Collectors.toList());
System.out.println(result);
}
结果
[张三, zhangsan, zs, 李四, lisi]
将list转map
private static void listToMap(List<UserDto> userDtoList){
Map<String, UserDto> map = userDtoList.stream().collect(Collectors.toMap(UserDto::getNameZh, Function.identity()));
System.out.println(map);
Map<String, List<String>> nameEmailMap = userDtoList.stream().collect(Collectors.toMap(UserDto::getNameZh, UserDto::getEmailList));
System.out.println(nameEmailMap);
}
结果
{李四=UserDto(nameZh=李四, nameEn=lisi, nameJp=zs, emailList=[lisi@qq.com, lisi@gmail.com]), 张三=UserDto(nameZh=张三, nameEn=zhangsan, nameJp=zs, emailList=[zhangsan@qq.com, zhangsan@gmail.com])}
{李四=[lisi@qq.com, lisi@gmail.com], 张三=[zhangsan@qq.com, zhangsan@gmail.com]}
将对象中的集合按流经行处理
private static void getUserEmailList(List<UserDto> userDtoList){
List<String> emailList = userDtoList.stream().map(UserDto::getEmailList).flatMap(Collection::stream)
.collect(Collectors.toList());
System.out.println(emailList);
}
结果
[zhangsan@qq.com, zhangsan@gmail.com, lisi@qq.com, lisi@gmail.com]