1、写在前面
Stream 中文称为 “流”,通过将集合转换为这么一种叫做 “流” 的元素序列,通过声明性方式,能够对集合中的每个元素进行一系列并行或串行的操作!
如果流中的元素的类实现了 Comparable 接口,即有自己的排序规则,那么可以直接调用 sorted() 方法对元素进行排序!

2、stream().sorted 操作总结


    @Data
    static   class User {
        private String name;
        //age
        private int age;
        //分数
        private double fraction;

        public User(String name, int age, double fraction) {
            this.name = name;
            this.age = age;
            this.fraction = fraction;
        }

    }
    
	public static void main(String[] args) {
	        List<User> userList = new ArrayList<>();
	        userList.add(new User("a1", 22, 2.2));
	        userList.add(new User("a2", 22, 2.5));
	        userList.add(new User("a3", 40, 2.7));
	        userList.add(new User("a4", 45, 2.8));
	
	        //返回 对象集合以UsergetAge升序排序:年龄   --默认升序
	        userList.stream().sorted(Comparator.comparing(User::getAge));
	
	        //返回 对象集合以UsergetAge降序排序  ===这里写在前面 和写在后面要看清楚,弄明白
	        userList.stream().sorted(Comparator.comparing(User::getAge).reversed()); //排序结果后再排序,
	        userList.stream().sorted(Comparator.comparing(User::getAge, Comparator.reverseOrder()));//是直接进行排序
	
		  //返回 对象集合以UsergetAge升序排序:**年龄并返回前n个元素**  --默认升序  ==下面同样写法
	        userList.stream().sorted(Comparator.comparing(User::getAge)).limit(2);
	
	        //返回 对象集合以UsergetAge升序排序:**年龄并去除前 n 个元素**  --默认升序 ==下面同样写法
	        userList.stream().sorted(Comparator.comparing(User::getAge)).skip(2);
		
	        //返回 对象集合以UsergetAge升序 getFraction升序
	        userList.stream().sorted(Comparator.comparing(User::getAge).thenComparing(User::getFraction));
	
	        //先以getAge升序,升序结果进行getAge降序,再进行getFraction升序
	        userList.stream().sorted(Comparator.comparing(User::getAge).reversed().thenComparing(User::getFraction));
	
	          //先以getAge降序,再进行getFraction升序
	        userList.stream().sorted(Comparator.comparing(User::getAge, Comparator.reverseOrder()).thenComparing(User::getFraction));
	
	        //先以getAge升序,升序结果进行getAge降序,再进行getFraction降序
	        userList.stream().sorted(Comparator.comparing(User::getAge).reversed().thenComparing(User::getFraction, Comparator.reverseOrder()));
	
	        //先以getAge降序,再进行getFraction降序
	        userList.stream().sorted(Comparator.comparing(User::getAge, Comparator.reverseOrder()).thenComparing(User::getFraction, Comparator.reverseOrder()));
	
	
	        //先以getAge升序,升序结果进行getAge降序,再进行getFraction升序,结果进行getAge降序getFraction降序
	        userList.stream().sorted(Comparator.comparing(User::getAge).reversed().thenComparing(User::getFraction).reversed());
	
	        //先以getAge升序,再进行getFraction降序
	        userList.stream().sorted(Comparator.comparing(User::getAge).thenComparing(User::getFraction, Comparator.reverseOrder()));
	
	
	    }





Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐