【发布时间】:2019-06-21 04:29:35
【问题描述】:
我想根据另一个具有不同值的数组对数组进行排序。 考虑以下几点:
参考数组:{"A","B","C"}
获得Array1:{"C","A","B"}
获得Array2:{"cc","aa","bb"}
获得Array3:{"123","asrd","sdhg"}
对应的值
A -> aa and asrd
B -> bb and sdhg
C -> cc and 123
我想按照我的参考数组指定的顺序对获得的数组 1、2 和 3 进行排序。
预期结果:
排序后得到的数组:{"A","B","C"}
排序后得到Array2:{"aa","bb","cc"}
排序后得到Array3:{"asrd","sdhg","123"}
PS:引用数组元素的顺序可以是任何东西([A,B,C] 或 [C,B,A] 等)。得到的数组 2 和 3 应该进行相应的排序。
我知道如何按照我的参考数组的顺序对获取的数组 1 进行排序。我尝试了一种逻辑来对获得的数组 2 和 3 进行排序,但我得到的结果是错误的
String[] referenceArray = new String[] { "A", "B", "C" };
String[] obtainedArray1 = new String[] { "C", "A", "B" };
String[] obtainedArray2 = new String[] { "cc", "aa", "bb" };
String[] obtainedArray3 = new String[] { "123", "asrd", "sdhg" };
final List<String> referenceArrayList= Arrays.asList(referenceArray);
ArrayList<String> obtainedArray1_List= new ArrayList<String>(Arrays.asList(obtainedArray1));
ArrayList<String> obtainedArray2_List= new ArrayList<String>(Arrays.asList(obtainedArray2));
ArrayList<String> obtainedArray3_List= new ArrayList<String>(Arrays.asList(obtainedArray3));
// Sorting ObtainedArray1_List - This works Fine
Collections.sort(obtainedArray1_List, Comparator.comparing(s -> referenceArrayList.indexOf(s)));
//Sorting obtainedArray2_List - Not Working
Collections.sort(obtainedArray2_List, Comparator.comparing(s -> referenceArrayList.indexOf(obtainedArray1[obtainedArray2_List.indexOf(s)])));
得到Array2_List排序后的结果:["aa","cc","bb"]
预期结果是
["aa","bb","cc"]
【问题讨论】:
-
不使用 OO 设计会使自己的生活变得复杂。您应该拥有一个对象数组(或列表,最好是),而不是拥有 3 个并行数组。每个对象将具有三个属性(第一个属性值为“A”、“aa”、“asrd”),然后您只需按其引用属性对对象列表进行排序。 Java 是一种面向对象的语言。定义类,并使用对象。
标签: java java-8 java-stream