最近在项目里使用了很多stream()方法,现跟大家分享一下
1、stream()操作分类
解释:
1)、无状态:指元素的处理不受之前元素的影响;
2)、有状态:指该操作只有拿到所有元素之后才能继续下去。
3)、非短路操作:指必须处理所有元素才能得到最终结果;
4)、短路操作:指遇到某些符合条件的元素就可以得到最终结果,如 A || B,只要A为true,则无需判断B的结果。
即:方法执行时数据获取的逻辑和数据判断的逻辑
2、sorted()用法
List<类> list; 代表某集合
//返回 对象集合以类属性一升序排序
list.stream().sorted(Comparator.comparing(类::属性一));
//返回 对象集合以类属性一降序排序 注意两种写法
list.stream().sorted(Comparator.comparing(类::属性一).reversed());//先以属性一升序,结果进行属性一降序
list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()));//以属性一降序
//返回 对象集合以类属性一升序 属性二升序
list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二));
//返回 对象集合以类属性一降序 属性二升序 注意两种写法
list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二));//先以属性一升序,升序结果进行属性一降序,再进行属性二升序
list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二));//先以属性一降序,再进行属性二升序
//返回 对象集合以类属性一降序 属性二降序 注意两种写法
list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,升序结果进行属性一降序,再进行属性二降序
list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一降序,再进行属性二降序
//返回 对象集合以类属性一升序 属性二降序 注意两种写法
list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二).reversed());//先以属性一升序,升序结果进行属性一降序,再进行属性二升序,结果进行属性一降序属性二降序
list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,再进行属性二降序<br><br><br>
举例说明:
public static void main(String[] args) {
List<Map<String, Object>> list = new ArrayList<>();
for (int i = 1; i < 10; i++) {
Map<String, Object> map = new HashMap<>();
map.put("name", "type" + i);
map.put("value", random.nextInt(1000));
list.add(map);
}
List<Map<String, Object>> collect = list.stream().sorted(Comparator.comparing((Map<String, Object> map) -> (int) map.get("value")).reversed()).collect(Collectors.toList());
System.out.println(collect);
}