【发布时间】:2014-11-29 18:04:45
【问题描述】:
public class Test {
public static void main(String[] args) {
List<Pair<String, Integer>> list = new ArrayList<>();
list.add(new Pair<>("1", 8));
list.add(new Pair<>("3", 2));
list.add(new Pair<>("2", 15));
list.stream()
.sorted(Comparator.comparingInt(p -> p.v))
.map(p -> p.k)
.forEach(System.out::println);
}
}
class Pair<K, V> {
K k;
V v;
public Pair(K k, V v) {
this.k = k;
this.v = v;
}
}
好的,正如你所理解的,这段代码正在打印我的配对键,从关联的最低值到最高值,所以我得到了预期的输出:
3 1 2
到目前为止一切顺利。现在我想做相反的事情,我以为我只需要做
list.stream()
.sorted(Comparator.comparingInt(p -> p.v).reversed())
.map(p -> p.k)
.forEach(System.out::println);
但是我得到一个编译错误:
v cannot be resolved or is not a field
所以看起来comparingInt 正在返回一个Comparator<Object>。为什么会这样?它不应该返回Comparator<Integer> 吗?
这些都可以通过 Eclipse Luna 版本 1 和 javac 重现。
javac -version => 1.8.0
java -version => java version "1.8.0_25"
哦,如果您觉得它太笼统,也可以随意更改我的问题的标题,但我找不到正确的术语
【问题讨论】:
-
它可能适用于 Comparator.reverseOrder。
-
@assylias 那么我将如何使用 reverseOrder 来实现呢?这意味着我的 pair 对象已经具有可比性。
-
@RobertBain Exaclty 我在找什么。谢谢 =) 您可以将其作为副本关闭。
标签: java java-8 comparator