stream流的常用操作
1.數據准備:
構建list
public static List<User> list() {
List<User> list = new ArrayList<>();
list.add(new User("孫悟空", 12));
list.add(new User("豬八戒", 23));
list.add(new User("沙僧", 22));
list.add(new User("唐僧", 45));
return list;
}
2.stream操作
1.list轉map
//屬性映射屬性
Map<String, Integer> map = list().stream().collect(Collectors.toMap(User::getName, User::getAge));
//屬性映射實體
Map<String, User> map1 = list().stream().collect(Collectors.toMap(User::getName, Function.identity()));
2.map轉list
//map中所有的value轉換為list
List<User> list = new ArrayList<>(map1.values());
3.提取list中實體的某個字段,生成一個新的list
List<String> list1 = list.stream().map(User::getName).collect(Collectors.toList());
4.過濾list
List<User> list2 = list().stream().filter(user -> user.getName().contains("孫")).collect(Collectors.toList());
5.分頁
long offset = 0;
long limit = 1;
List<User> list3 = list().stream().skip(offset).limit(limit).collect(Collectors.toList());
6.聚合
int sum = list().stream().mapToInt(User::getAge).sum();
int max = list().stream().mapToInt(User::getAge).max().getAsInt();
int min = list().stream().mapToInt(User::getAge).min().getAsInt();
double average = list().stream().mapToDouble(User::getAge).average().getAsDouble();
7.逗號字符串轉list
String s = "12345,232434, 54354534 ";
//轉為 List<String>
List<String> list4 = Arrays.asList(s.split(","));
//轉為 List<Long>
List<Long> collect = Arrays.asList(s.split(",")).stream().map(o -> Long.parseLong(o.trim())).collect(Collectors.toList());
8.將list轉為逗號字符串
//list轉逗號字符串
List<String> strs = new ArrayList<>();
strs.add("孫悟空"); strs.add("豬八戒"); strs.add("唐僧"); strs.add("沙僧");
String collect1 = strs.stream().map(String::valueOf).collect(Collectors.joining(","));
String collect = list().stream().map(User::getName).collect(Collectors.joining(","));
排序:
//倒序並把null值排到最后
list.stream().sorted(Comparator.comparing(User::getNum, Comparator.nullsFirst(Double::compareTo)).reversed()) .collect(Collectors.toList());
分組
Map<String, List<WorkAreaTreeVO>> map = treeVOS.stream().collect(Collectors.groupingBy(WorkAreaTreeVO::getAttrValue));
根據多個字段去重
list = list.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(p->p.getName1() + ";" + p.getName2()))), ArrayList::new));