JDK1.8stream操作

1、distinct()

public static void main(String[] args) {
        List commonConfigList = new ArrayList<>(10);
        for (int i =0;i<10;i++){
            commonConfigList.add(new CommonConfig(100+i,"hao"+i));
            if(i%2==0){
                commonConfigList.add(new CommonConfig(100+i,"hao"+i));
            }
        }

        System.out.println(JSON.toJSONString(commonConfigList.stream().distinct().collect(Collectors.toList())));
        System.out.println(JSON.toJSONString(commonConfigList.stream().collect(Collectors.toMap(CommonConfig::getCode, CommonConfig::getName))));
    }
下面只执行结果
[{"code":100,"editName":"","fire":false,"id":0,"level":0,"name":"hao0","parentCode":0,"selected":0,"sort":0}...]
Exception in thread "main" java.lang.IllegalStateException: Duplicate key hao0
	at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
	at java.util.HashMap.merge(HashMap.java:1254)
	at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
	at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at cn.techwolf.blue.service.fastfriend.service.impl.FastFriendServiceImpl.main(FastFriendServiceImpl.java:650)

通过上面的代码,distinct()这个方法:

  • 如果CommonConfig这个类重写了hash和equals方法,则只会有10个结果,会去除重复元素,
  • 如果CommonConfig这个类没有重写了hash和equals方法,则只会有15个结果,不会去除重复元素

2、Collectors

2.1、toMap

在使用Collectors.toMap(CommonConfig::getCode, CommonConfig::getName))的时候一定要注意,不能有重复元素,有重复元素会出现下面的错误:(重复key

    public static void main(String[] args) {
        List commonConfigList = new ArrayList<>(10);
        for (int i =0;i<10;i++){
            commonConfigList.add(new CommonConfig(100+i,"hao"+i));
            if(i%2==0){
                commonConfigList.add(new CommonConfig(100+i,"hao"+i));
            }
        }
System.out.println(JSON.toJSONString(commonConfigList.stream().collect(Collectors.toMap(CommonConfig::getCode, CommonConfig::getName))));
    }
Exception in thread "main" java.lang.IllegalStateException: Duplicate key hao0
	at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
	at java.util.HashMap.merge(HashMap.java:1254)
	at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
	at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at cn.techwolf.blue.service.fastfriend.service.impl.FastFriendServiceImpl.main(FastFriendServiceImpl.java:650)

2.2、groupingBy的使用

 

 

3、sorted()使用

sorted(Comparator.comparing(Job::getId,Comparator.reverseOrder())) 倒叙还可以写成:sorted(Comparator.comparing(Job::getId).reversed())

例子:

userBoss.setTotalJobs(CollectionUtils.isNotEmpty(jobs) ? jobs.stream().sorted(Comparator.comparing(Job::getId,Comparator.reverseOrder())).limit(30).collect(Collectors.toList()) : new ArrayList<>());

Comparator 能用用lambada表达式来初始化, 我们还能够逆序一个已经排序的流。
接下来我们将会使用java 8 的流式sorted排序List 、Map 、 Set
1、sorted() 默认使用自然序排序, 其中的元素必须实现Comparable 接口
2、sorted(Comparator comparator) :我们可以使用lambada 来创建一个Comparator 实例。可以按照升序或着降序来排序元素。
下面代码以自然序排序一个list

list.stream().sorted() 

自然序逆序元素,使用Comparator 提供的reverseOrder() 方法

list.stream().sorted(Comparator.reverseOrder()) 

使用Comparator 来排序一个list

list.stream().sorted(Comparator.comparing(Student::getAge)) 

把上面的元素逆序

list.stream().sorted(Comparator.comparing(Student::getAge).reversed())

 

 

 

 

你可能感兴趣的:(基础)