我想像下面这样对流进行反向排序,但是编译时错误为“IntStream类型中的sorted()方法不适用于参数(
。有人能纠正这个吗
IntStream.range(1, 100)
.filter(x -> x%2 != 0)
.sorted((o1,o2) -> -o1.compareTo(o2))
.forEach(System.out::println);
因为您使用的是intstream
,所以它只有sorted方法的一个重载,而且是自然顺序(这是有意义的)。
相反,将intstream
中的流框到stream
中,这样就足够了:
IntStream.range(1, 100)
.filter(x -> x % 2 != 0)
.boxed() // <--- boxed to Stream<Integer>
.sorted((o1,o2) -> -o1.compareTo(o2)) // now we can call compareTo on Integer
.forEach(System.out::println);
不过,正如@Holger在评论中提到的:
IntStream.range(1, 100)
.filter(x -> x % 2 != 0)
.boxed()
.sorted(Comparator.reverseOrder())
.forEachOrdered(System.out::println);
foreachordered
(大声喊@Holger总是提醒我)或者像@Holger建议的那样,它可以简化到这样的程度:
IntStream.range(0, 50)
.map(i -> 99-i*2)
.forEachOrdered(System.out::println);
顺便说一句,在JDK9中,从文章中的代码开始,您可以首先通过iterate
将其简化为:
IntStream.iterate(1, i -> i <= 99, i -> i + 2)
.boxed()
.sorted(Comparator.reverseOrder())
.forEachOrdered(System.out::println);
IntStream.iterate(99, i -> i > 0 , i -> i - 2)
.forEachOrdered(System.out::println);
通过这种方法,我们可以避免筛选
、装箱
、排序
等。
我有这个列表,我想按保留顺序订购,但我没有在自动完成辅助中找到任何函数 我也尝试过: 但是我有编译错误:
所以我遇到了这个方法,它能够按值对HashMaps进行排序。 我想在比较器上使用方法,但是我似乎找不到合适的地方放它。
我正在使用java lambda对列表进行排序。 我怎样才能反向排序呢?
问题内容: 我使用以下行以相反的顺序对浮点数组进行排序,但出现错误消息,这是什么问题? 错误:找不到符号 符号:方法sort(float [],java.util.Comparator)位置:类java.util.Arrays Arrays.sort(sortedData,Collections.reverseOrder()); ==================================
问题内容: 我正在尝试对Go中的整数切片进行反向排序。 如何对它进行排序,使其从最高到最低?所以[25 5 4 3 1] 我已经试过了 资料来源:http : //golang.org/pkg/sort/#Reverse 但是,我得到下面的错误 问题答案: sort.Ints是对几个int进行排序的便捷函数。通常,如果要对某些内容进行排序和排序,则需要实现sort.Interface接口.Reve
我有一个数据库表,我想对其进行筛选,然后按相反(降序)顺序进行排序。我如何在类似于以下内容的速度流中表达: 我希望我的SQL查询能够通过速度优化,因此我不能使用匿名lambda。