并行流parallel
stream是顺序流,由主线程按顺序对流执行操作,而parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。例如筛选集合中的奇数
如果流中的数据量足够大,并行流可以加快处速度。
list.stream().parallel()
Person p = new Person();
List<Person> list1 = new ArrayList<>();
list1.add(new Person().setName("a").setId(1));
list1.add(new Person().setName("b").setId(2));
list1.add(new Person().setName("b").setId(1));
排序
>list1.sort(Comparator.comparing(Person::getId).reversed().thenComparing(Person::getName));
//根据 id **由大到小**排序后再根据姓名排序
>Collections.sort(list1,Comparator.comparing(Person::getId));
//根据id排序,由小到大
> list1.sort((x1,x2)-> x2.getId().compareTo(x1.getId()));
根据id排序,由大到小 如果是反过来则,由小到大,相等即不替换位置
> List<Person> list2 = list1.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(Person::getName))),ArrayList::new));
//根据Person的名字进行去重
>List<Person> list3 = list1.stream().sorted((a1,a2)->a2.getId().compareTo(a1.getId())).sorted((a1,a2)->a2.getName().compareTo(a1.getName())).collect(Collectors.toList());
先根据id排序再根据名字排序
>List<Integer> list3 = Arrays.asList(new Integer[]{1,5,3,2});
list3.sort((a1, a2) -> 0); //表示不替换位置
>// list3.sort((a1, a2) -> a1.compareTo(a2)); //表示从小到大排列,如果是对象可以,p1.getAge()>p2.getAge()进行排列
//Collections.sort();
> int[] intArray = {1,5,3};
Arrays.sort(intArray);
根据id进行分组
Map<Integer,List> map = list1.stream().collect(Collectors.groupingBy(Person::getId) );
//根据id进行分组
相同数据只要某一属性最大条
1.排序 2.去重
原理:他会选择相同数据的第一条
List list1=users.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
ArrayList collect = list1.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection( () -> new TreeSet<>(Comparator.comparing(User::getId))), ArrayList::new));
获得一组数据某一属性的最大值数据
User user = users.stream().max(Comparator.comparing(User::getId).reversed()).get();