gpt4 book ai didi

java - 根据具有不同值的另一个数组对数组进行排序

转载 作者:行者123 更新时间:2023-12-02 04:09:55 24 4
gpt4 key购买 nike

我想根据另一个具有不同值的数组对一个数组进行排序。考虑以下因素:

引用数组:{"A","B","C"}

获取数组1:{"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 进行排序。

预期结果:
排序后得到的Array:{"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"]

Expected Result is ["aa","bb","cc"]

最佳答案

正如 JB Nizet 所说,你让你的生活变得复杂了。您有三个独立的数组,但它们的内容是相关的。你是说A , aaasrd属于在一起,以及 B , bbsdhg ,和C , cc123 .

这些可以被认为是单个对象的三个属性。这就是面向对象的要点。您应该定义一个代表这三个属性的类:

public class Holder {

private String letter;
private String lower;
private String text;

public Holder(String letter, String lower, String text) {
this.letter = letter;
this.lower = lower;
this.text = text;
}

public String getLetter() {
return this.letter;
}

@Override
public String toString() {
return String.format("Holder(letter=%s, lower=%s, text=%s)",
this.letter, this.lower, this.text);
}
}

您的三个数组一开始就不应该存在,而应该是带有 Holder 的数组或集合。对象。为了方便起见,这里转换为 List<Holder> .

List<Holder> holders = IntStream.range(0, obtainedArray1.length)
.mapToObj(i -> new Holder(obtainedArray1[i], obtainedArray2[i], obtainedArray3[i]))
.collect(Collectors.toList());

现在您可以简单地排序收集一个新的排序列表,而不是三个单独的排序数组。

List<String> referenceList = Arrays.asList("A", "B", "C");
List<Holder> sorted = holders.stream()
.sorted(Comparator.comparing(t -> referenceList.indexOf(t.letter)))
.collect(Collectors.toList());

关于java - 根据具有不同值的另一个数组对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56696853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com