给定列表<String>需要使用流和比较器按给定的字母顺序对其进行排序



给定的列表和一组字母,使用Java流对列表进行排序

List<String> names= Arrays.asList("Robin","Zax","John");
String order = "ZALBKNDWMTFCGOIUHEPQXSYVRJ"; 

的例子:输入:列表名称= Arrays.asList("Robin","Zax","John");字符串order = "ZJR">

输出:["Zax","John","Robin"]

输入2:List<String> names= Arrays.asList("Robin","Zax","John","Rohan"); String order = "OZJRHBAS";

输出:["Zax","John","Rohan","Robin"]

names.stream().sorted(new MyComparator(order)).collect(Collectors.toList()).forEach(System.out::println); 

我只是想实现下面的比较方法是我尝试过的,但它的排序只基于第一个字母。有没有一种方法可以让字符串中的所有字母都被排序?

class MyComparator implements Comparator<String> {
private String order;
MyComparator(String order) {
this.order = order;
}
@Override
public int compare(String s1, String s2) {
char[] charsOfS1 = s1.toCharArray();
char[] charsOfS2 = s2.toCharArray();
int proximity = 0;
for(int i=0; i<Math.min(charsOfS1.length,charsOfS2.length);i++){
int check = order.indexOf(s1.charAt(i)) - order.indexOf((s2.charAt(i)));
if(check<0)
proximity--;
else if(check>0)
proximity++;
}
return proximity;
}
}

您可以简单地比较字符串的第一个字符的索引位置:

public int compare(String s1, String s2) {
return order.indexOf(s1.charAt(0)) - order.indexOf((s2.charAt(0)));
}
<<p>完整演示/strong>:
import java.util.Comparator;
import java.util.List;
import java.util.Arrays;
import java.util.stream.Collectors;
class MyComparator implements Comparator<String> {
private String order;
MyComparator(String order) {
this.order = order;
}
@Override
public int compare(String s1, String s2) {
return order.indexOf(s1.charAt(0)) - order.indexOf((s2.charAt(0)));
}
}
public class Main {
public static void main(String[] args) {
// Test
List<String> names = Arrays.asList("Robin", "Zax", "John");
String order = "ZJR";
System.out.println(names.stream().sorted(new MyComparator(order)).toList());
}
}

:

[Zax, John, Robin]

最新更新