Stream常用方法

Stream常用方法

1. 剔除重复值

List<T> list = snList.stream().distinct().collect(Collectors.toList()

或者使用hutool的

collUtil.distinct()

2. 切割List成为字符串

String str = snList.stream().collect(Collectors.joining("','"))

3. 将对List进行筛选

List<String> list = list.stream().map(l -> l.getStr()).collect(Collectors.toList())

4. 判断List某个值是否存在

使用hutool的方法

Filter<String> filterCustSn =s->s.equals("张三");
if (StrUtil.isNotEmpty(CollUtil.findOne(snList,filterCustSn))){
  continue;
}

Stream

boolean bol = list.stream.filter(m->m.getStr().equals("张三")).findAny().isPresent();

5.根据条件获取List的某个值

T t = list.stream.filter(m->m.getStr().equals("张三")).findFirst().get();

如果没有匹配的就会报错

Exception in thread "main" java.util.NoSuchElementException: No value present
	at java.util.Optional.get(Optional.java:135)

推荐使用下面的方法

T t = list.stream.filter(m->m.getStr().equals("张三")).findFirst().orElse(null);

6.获取List中金额最大值 bigDecimals类型

BigDecimal maxBig = Arrays.stream(bigDecimals).max(BigDecimal::compareTo).get()

7.打印

Arrays.stream(strings).forEach(System.out::println)

8.排序

List<T> sortList = list.stream().sorted(Comparator.comparing(T::getAge)) 
//方法二
List<T> sortList = Arrays.asList(strings).stream().mapToInt(Integer::parseInt).toArray();

9.查询List所有匹配数据

List<T> list = list.stream().filter(b->b.getStr().equals("张三")).collect(
    Collectors.joining()).trim()

10.合计 bigDecimals类型也可以使用

double sum= dto.stream().mapToDouble((x)->x.getMoney().doubleValue()).sum()

11.交集

        List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(toList());
        System.out.println("---交集 intersection---");
        intersection.parallelStream().forEach(System.out :: println);

12.差集

        //  (list2 - list1)
        List<String> reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(toList());
        System.out.println("---差集 reduce2 (list2 - list1)---");
        reduce2.parallelStream().forEach(System.out :: println);

13.并集

        List<String> listAll = list1.parallelStream().collect(toList());
        List<String> listAll2 = list2.parallelStream().collect(toList());
        listAll.addAll(listAll2);
        System.out.println("---并集 listAll---");
        listAll.parallelStream().forEachOrdered(System.out :: println);

14.去重并集

        List<String> listAllDistinct = listAll.stream().distinct().collect(toList());
        System.out.println("---得到去重并集 listAllDistinct---");
        listAllDistinct.parallelStream().forEachOrdered(System.out :: println);

15.获取重复KEY

  	  List<String> collect = saveList.parallelStream().collect(Collectors.toMap(e -> 						e.getDevice().getDeviceNo(), e -> 1, Integer::sum)).entrySet().stream().filter(entry -> entry.getValue() > 1).map(Map.Entry::getKey).collect(Collectors.toList());