如何按包含整数的子列表对列表进行排序

时间:2016-06-24 09:47:13

标签: java

所以如果你有这个:

List<Integer> subList;
    for example contains: [0, 6] or [2, 6] , [7, 6]
        [[0, 6], [2, 6], [7, 6]]
List<List> list;
    contains subLists: [0, 6], [2, 6], [7, 6] or [55, 4], [57, 5], [58, 5]
        [[[0, 6], [2, 6], [7, 6]], [[55, 4], [57, 5], [58, 5]]]

如何对子列表的第二个值进行升序排序。您可以假设其他子列表中的其他值与前一个或下一个子列表相距很远。从subList到subList没有相同的值。

进入以下内容:

[[[55, 4], [57, 5], [58, 5]], [[0, 6], [2, 6], [7, 6]]]

4 个答案:

答案 0 :(得分:0)

使用比较器:

Collections.sort(List<T> list, Comparator<T> c) 

并相应地构建比较器

答案 1 :(得分:0)

您可以使用根据子列表的内容进行排序的比较器:

  1. 确保所有子列表按降序排序(您的示例似乎反映了此要求):

    list.forEach(sublist -> Collections.sort(sublist.sort(Collections.reverseOrder())));

  2. 根据子列表的第一个元素

    对外部列表进行排序

    Collections.sort(list, (sublistone, sublisttwo) -> sublistone.get(0).compareTo(sublisttwo.get(0)));

答案 2 :(得分:0)

Collections.sort(new ArrayList<List<Integer>>(), new Comparator<List<Integer>>() {
    public int compare(final List<Integer> o1, final List<Integer> o2) {
        return o1.get(1) - o2.get(1);
    }
});

答案 3 :(得分:0)

抱歉,我只是通过输入来解决它。多一点背景。我正在使用像素数据。 x和y作为内部列表值。有些像素组彼此远离,有些像素处于同一高度或不同的x。但我想对高度进行排序。

它如下:

public List<List> sortSubList(final List<List> areas) {
    List<List> sorted = new ArrayList<>();
    conuloop:
    for (List<List> area : areas) {
        if (sorted.contains(area)) {
            continue;
        } else {
            if (sorted.isEmpty()) {
                sorted.add(area);
            } else {
                int pos = 1;
                for (List<List> sortArea : sorted) {
                    if ((int) sortArea.get(0).get(1) <= (int) area.get(0).get(1)) {
                        sorted.add(pos, area);
                        continue conuloop;
                    } else {
                       pos += 1;
                    }
                }
                sorted.add(0, area);
             }
        }
    }
    return sorted;
}

如果你们有任何建议可以提高效率,减少耗时,因为这需要经过大量数据。我很高兴听到它。