java - 在 Java 中对 ArrayList 中的特定对象进行排序而不更改其他对象

标签 java arraylist

假设我有一个具有 Rank 和 SubRank 属性的对象的 ArrayList。它们是通过网络服务传递给我的,所以我没有处理最初的订购。如果没有要使用的子等级,则设置为-1。

[Rank: 1, SubRank: -1]
[Rank: 2, SubRank: -1]
[Rank: 3, SubRank: 3]
[Rank: 4, SubRank: 2]
[Rank: 5, SubRank: -1]
[Rank: 6, SubRank: 1]

我需要做的是对具有 SubRank 的任何内容进行排序,仅保留剩余对象完好无损,以便列表最终看起来像:

[Rank: 1, SubRank: -1]
[Rank: 2, SubRank: -1]
[Rank: 6, SubRank: 1]
[Rank: 4, SubRank: 2]
[Rank: 5, SubRank: -1]
[Rank: 3, SubRank: 3]

限制:Java 7,无外部库

最佳答案

由于 OP 提到他仅限于 Java 7 并且不添加任何库......

创建一个新的List,其中仅包含SubRank > -1 的项目。然后对该列表进行排序。然后向下迭代原始列表,当您遇到 SubRank > -1 的项目时,将其替换为排序列表中的相应项目。

List<Item> sortedItems = new ArrayList<>();
for (Item item : items) {
    if (item.subRank > -1) {
        sortedItems.add(item);
    }
}

Collections.sort(sortedItems,
                 new Comparator<Item>()
                 {
                     @Override
                     public int compare(Item lhs, Item rhs) {
                         return Integer.compare(lhs.SubRank, rhs.SubRank);
                     }
                 });

int sortedIndex = 0;
for (int i; i < items.size(); i++) {
    if (items.get(i).subRank > -1) {
        items.set(i, sortedItems.get(sortedIndex++));
    }
}

关于java - 在 Java 中对 ArrayList 中的特定对象进行排序而不更改其他对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38376797/

相关文章:

java - 地球绕太阳运行模拟对象数组无法正确打印java

Java根据数组列表中的项目计算百分比

java - 如何防止调用者捕获我的异常

java - map 也可以是集合吗?

java - 一个接一个地从 Arraylist 中打印出不同的项目

java - 通过点击特定标签来调用与arrayList中的对象相关的方法

Java arrayList 添加对象 n 次

java - 如何判断数组列表上的 for 循环是否已结束?

java - 使用循环重复线程与使用 scheduleAtFixedRate() 重复运行

java - 根据当前文本压缩修订历史记录