采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
RT所示,如果是要重写comparing的实现的话,能否向匿名内部类在流中实现还是在外面实现呢?第一次接触stream流,可能问题有点愚蠢,请老师指教一下,感谢
流中元素如何已经实现了Compare接口,可以直接使用第一/第二种方式进行正序/倒序排列。如何没有实现Compare接口,或者需要自定义排序规则,可以使用第三种方式排序。
@Test public void test() { List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5); // 第一:正序排列 list.stream().sorted().forEach(System.out::println); // 第二:倒序排列 list.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println); // 第三:按奇偶排序:奇数在先,偶数在后 list.stream().sorted(Comparator.comparing(item -> { // 奇数为1;偶数为-1 return item % 2 == 0 ? 1 : -1; })).forEach(System.out::println); }
非常感谢!
// 奇数为 1;偶数为 -1 return item % 2 == 0 ? 1 : -1; 这个判断是偶数为1 奇数为 -1 啊,老师。难道有玄机? 我看源码里面是 (Comparator<T> & Serializable) (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2)); compareTo默认是升序的,但是这个keyExtractor是item映射的吗? c1和c2是另一个lambda的入参,但是这个与item有何关系呢,值是什么呢?感觉不理解的地方有点多,老师抽空看下,万分感谢。。没研究透
那个奇偶的是我写错了。关于后面那个问题,你QQ联系我吧,有点儿复杂,一两句说不明白。
登录后可查看更多问答,登录/注册
可以改变的编程效率
1.4k 8
816 7
717 7
1.0k 6
762 6