gpt4 book ai didi

java - 使用多个索引对 String[] 的 ArrayList 进行排序

转载 作者:行者123 更新时间:2023-12-01 16:53:57 24 4
gpt4 key购买 nike

虽然我已经使用这个网站有一段时间了,但我还是在这里积极撰写问题的新手。

我想根据数组的前两个索引按词汇顺序(=自然顺序?!)对 ArrayList 进行排序。目前我使用了以下代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

public class SortArrayList {

public static void main(String[] args) {

ArrayList<String[]> workingSet = new ArrayList<>();
workingSet.add(new String[]{"MiningCorp", "2265 Betacity"});
workingSet.add(new String[]{"MiningCorp", "6454 Iotacity"});
workingSet.add(new String[]{"Arbiter", "3812 Gammacity"});
workingSet.add(new String[]{"MiningCorp", "1234 Thetacity"});
workingSet.add(new String[]{"Arbiter", "1812 Deltacity"});

Comparator<String[]> staComp = new Comparator<String[]>() {

@Override
public int compare(String[] first, String[] second) {
String composite1 = first[0] + " " + first[1];
String composite2 = second[0] + " " + second[1];
return composite1.compareTo(composite2);
}
};

Collections.sort(workingSet, staComp);
for(String[] arr : workingSet){
System.out.println(Arrays.toString(arr));
}


}

}

这应该产生以下输出:

[Arbiter, 1812 Deltacity]
[Arbiter, 3812 Gammacity]
[MiningCorp, 1234 Thetacity]
[MiningCorp, 2265 Betacity]
[MiningCorp, 6454 Iotacity]

这正是我想要的。使用预构建方法是否有更优雅的方式?

如果我想按词汇顺序按第一个数组条目分组进行排序,但在该组内我希望各个数组按逆词汇顺序排序,该怎么办?为此,我是否需要第二个比较器来首先对每个数组的第二个索引的条目进行预排序?

这是我想从这个例子中获得的内容:

[Arbiter, 3812 Gammacity]
[Arbiter, 1812 Deltacity]
[MiningCorp, 6454 Iotacity]
[MiningCorp, 2265 Betacity]
[MiningCorp, 1234 Thetacity]

最佳答案

如果 java8 是一个选项,那么我会使用 thenComparing 方法来组合两个排序说明符。

当使用reversed时,比较器的结果将颠倒。

示例代码:

// turn your list into a stream
workingSet.stream()

// sort it...
.sorted(

// first sort specifier: 0th element of Array
Comparator.<String[], String>comparing(composite -> composite[0])

// combine sort specifiers
.thenComparing(

// second sort specifier: 2st element of Array
Comparator.<String[], String>comparing(composite -> composite[1])

// REVERSED!
.reversed()
)
)

// convert each array to a String
.map(Arrays::toString)

// print each String
.forEach(System.out::println);

关于java - 使用多个索引对 String[] 的 ArrayList 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35361047/

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