按Integer属性排序列表时,无法取消引用int

时间:2017-12-25 21:16:41

标签: java arrays sorting arraylist

我有一个2D数组,我将它填充到Segment类型的ArrayList(已经定义的类I')。我想基于每个对象中的第二个元素按升序对Arraylist进行排序。我已经检查了link这个使用类似的类来对它进行排序但它不能与我合作并且它给了我

  

int无法解除引用

错误。

以下是我的代码

请注意,object.getR()为我提供了每个对象中的中间元素。例如,段x= (6,8,4)然后x.gerR()类型的对象为我提供值8.

int[][] input = {
    {0, 3, 3}, {3,5,2}, {6,8,4}, {9,11,3}, {2,4,4}, {5,6,3}, {7,8,3},{9,12,1}
};

ArrayList<Segment> data = new ArrayList<>();

for (int[] input1 : input) {
    data.add(new Segment(input1[0], input1[1], input1[2]));
}
Collections.sort(data, new Comparator<Segment>() {
    @Override
    public int compare(Segment lhs, Segment rhs) {
        return lhs.getR().compareTo(rhs.getR());
    }
});

1 个答案:

答案 0 :(得分:0)

var can = true; function dodo() { if(can) { can = false; asyncFunc(function(data) { doSmth(); can = true; }); } } setInterval(dodo, 0); 建议int cannot be dereferenced返回getR()而非int(尽管您的标题表明了这一点)。 Integer原始类型,因此它没有int之类的任何方法。比较int值的最简单方法是compareTo(默认情况下,如果要获得降序Integer.compare(a, b)的结果,则按升序返回结果)。

所以改变

Integer.compare(b, a)

return lhs.getR().compareTo(rhs.getR());
自从Java 8以来,我们可以使用Lambdas和方法引用。此外,列表现在还有return Integer.compare(lhs.getR(), rhs.getR()); 方法,允许我们编写如下代码:

sort(Comparator)

而不是

data.sort(Comparator.comparingInt(Segment::getR));