67,549
社区成员




public void test(){
List<String> list=new ArrayList<>();
list.add("1-1");
list.add("1-2");
list.add("1-10");
list.add("2-1");
list.add("3-1");
list.add("2-10-1");
list.add("2-10-10");
list.add("2-10-2");
list.sort(Comparator.comparing(Function.identity(), this::compare));
System.out.println(list);
}
public int compare(String x, String y){
String[] split = x.split("-");
String[] split1 = y.split("-");
int min = Math.min(split.length, split1.length);
for (int i = 0; i < min; i++) {
Integer s0 = Integer.valueOf(split[i]);
Integer s1 = Integer.valueOf(split1[i]);
if (!s0.equals(s1)){
return s0.compareTo(s1);
}
}
return min==split.length?-1:1;
}
list.sort((o1, o2) -> {
String[] a1 = o1.split("-");
String[] a2 = o2.split("-");
int l = Integer.max(a1.length, a2.length);
int i1 = 0;
int i2 = 0;
for (int i = 0; i < l; i++) {
i1 = i > a1.length - 1 ? 0 : Integer.parseInt(a1[i]);
i2 = i > a2.length - 1 ? 0 : Integer.parseInt(a2[i]);
if (i1 != i2) {
break;
}
}
return i1 - i2;
});
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("1-1");list.add("2-1");list.add("3-1");list.add("1-1-1");list.add("2-1-2");
list.add("2-2-2");list.add("3-1-2");list.add("3-1-1-1");
Collections.sort(list,(item1,item2) ->{
String s1 = item1.replaceFirst("-", ".").replaceAll("-", "");
String s2 = item1.replaceFirst("-", ".").replaceAll("-", "");;
double d1 = Double.parseDouble(s1);
double d2 = Double.parseDouble(s2);
return d1 - d2 > 0 ? 1 : d1 == d2 ? 0 : -1;
});
list.stream().forEach(item -> System.out.println(item));
}
这样也行public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("1-1");list.add("2-1");list.add("3-1");list.add("1-1-1");list.add("2-1-2");
list.add("2-2-2");list.add("3-1-2");list.add("3-1-1-1");
List<Node> sortList = list.stream().map(item -> {
String s = item.replaceFirst("-", ".").replaceAll("-", "");
return new Node(Double.parseDouble(s),item);
}).collect(Collectors.toList());
Collections.sort(sortList, Comparator.comparing(Node::getValue));
list = sortList.stream().map(item -> item.getKey()).collect(Collectors.toList());
list.stream().forEach(item -> System.out.println(item));
}
@Data
static class Node{
private Double value;
private String key;
public Node(Double value,String key){
this.key = key;
this.value = value;
}
}
给你写了一个,暂时能想到的排序,可能会有更好的