如何使用数组中png的名称以两种不同的方式对数组进行排序



我制作了一个数组,其中包含8个PNG文件,例如27.png。我试图在j.label中显示这些,并在它们之间进行交换,但它们需要按两种不同的东西进行排序。PNG名称中的"2"表示它是第二便宜的商品,7表示它是评分第七高的商品。因此34.png将是第三便宜的,评级为4/8。

我试着研究使用index.of,但我找不到在我的环境中使用它的方法。

任何帮助都将不胜感激,谢谢大家。

public class Main {
public static void main(String[] args) {
String [] pngs = {"18.png","43.png", "27.png", "62.png", "71.png","34.png", "55.png", "86.png"};
//this will sort by cheapest first
java.util.Arrays.sort(pngs);
printArray(pngs);
//to sort by lowest rank first, swap digits, sort, re-swap digits
swapFirstTwoDigits(pngs);
java.util.Arrays.sort(pngs);
swapFirstTwoDigits(pngs);
printArray(pngs);

//to sort by highest rank first, swap digits, sort, re-swap digits
swapFirstTwoDigits(pngs);
java.util.Arrays.sort(pngs,java.util.Collections.reverseOrder());
swapFirstTwoDigits(pngs);
printArray(pngs);
}
static void swapFirstTwoDigits(String[] array){
for (int i = 0; i < array.length; i++) {
String s = array[i];
array[i] = ""+s.charAt(1)+s.charAt(0)+s.substring(2);
}
}

static void printArray(String [] array){
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
System.out.println("-------------------");
}
}

如果将这些名称存储在列表中,则可以利用使用Comparator的list#排序方法。

List<String> names = Lists.newArrayList( "35.png", "27.png" );
names.sort( Comparator.comparing( ( String o ) -> Integer.parseInt( o.substring( 0, 1 ) ) )
.thenComparing( o -> Integer.parseInt( o.substring( 1, 2 ) ) ) );

如果将它们存储在其他集合中,则可以利用Stream API从集合中获取流,并使用相同的比较器对流进行排序

最新更新