java - 使用 Java 中具有相同类型属性的另一个数组列表的顺序,按对象属性对数组列表进行排序

标签 java sorting collections arraylist

我有 2 个包含这样对象的数组列表:

第一个数组列表包含字符串和 double :[a 1.1, b 1.2, d 0.4, g 1.9, f 0.5 等等...]

第二个数组列表包含字符串、 double 和整数:[b 0.1 2, f 1.1 5, g 2.3 1, a 1.1 2 等等...]

第二个数组列表中可能包含与第一个数组列表相同或更多或更少的项目,但其所有字符串属性值将是仅出现在第一个数组列表的字符串属性中的任何值。

我需要根据第一个数组列表字符串属性的顺序按字符串属性对第二个数组列表进行排序。第一个数组列表已经按顺序排列,如果我对第二个数组列表进行排序,则预期输出将是:

[a 1.1 2,b 0.1 2,g 2.3 1,f 1.1 5 .....]

我已经看到了一些有关比较器的问题和答案,但它们都在使用一种类型的数组列表进行排序。但这里我有两种类型的数组列表,我真的不知道该怎么做!

因此,如果您有任何想法,请与我分享,如果可能的话,请分享一些示例代码。

我是 stackoverflow 的新手,并且对 Java 没有太多经验。我在这种情况下遇到了很大的麻烦。经过谷歌搜索和搜索,特别是在 stackoverflow 中,但找不到任何有用的想法。以上情况我已经解释过了,如有错误还请见谅!

谢谢!

最佳答案

这相当简单。这是一些伪 Java,它假设 list1 中没有重复的键,并且不需要任何外部库。

假设以下...

class List1Item {
    String stringValue;
    double doubleValue;
};
class List2Item {
    String stringValue;
    double doubleValue;
    int    intValue;
};

List<List1Item> list1 = new ArrayList<>();
List<List2Item> list2 = new ArrayList<>();

一般方法是在每个键值与其在第一个列表中的位置之间构建映射。

// Map to hold list1 key-to-position association
Map<String,Integer> sortKeys = new HashMap<>();

// Populate the key-to-position map with keys from list1
int pos=0;
for (List1Item i : list1)
    sortKeys.put(i.stringValue,pos++);

然后使用映射根据 list1 中键的位置对 list2 项进行排序:

// Define a comparator that will use the map to sort list2 keys
Comparator<List2Item> comp = new Comparator<List2Item>() 
{
    public int compare(List2Item v1, List2Item v2)
    {
        return sortKeys.get(v1.stringValue).compareTo(sortKeys.get(v2.stringValue));
    }
}
Collections.sort(list2,comp);

关于java - 使用 Java 中具有相同类型属性的另一个数组列表的顺序,按对象属性对数组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10918492/

相关文章:

java - 这个算法的大 O 复杂度是多少?

java - Java Collections 中的插入顺序维护需求

java - hibernate : delete is not valid without active transaction

java - 有没有办法在创建对象时删除它?

ruby-on-rails - 订购elasticsearch结果,elasticsearch-rails gem,Rails

javascript - node.js 不工作 Object.keys

java - Comparator/able 中的 equals() 与 compareTo()(理论)

c# - 如何通过自定义多态类型的集合获得多态行为?

java - Weblogic 11g,在托管服务器上部署了ear,无法访问

java - 如果按下主页键或按下返回键,则停止以下 Activity - Android