繁体   English   中英

排序数字1-10,将其拼写形式存储在Java的arraylist中

[英]Sort numbers 1-10 stored as their spelling in a arraylist in java

我有如下的字符串数组列表

List<String> list = new ArrayList<String>();
list.add("one");
list.add("ten");
list.add("six");
list.add("two");

排序后的输出应该是
一,二,六,十

您可以基于地图的值进行排序,例如:

Map<String, Integer> numbers = new HashMap<>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
numbers.put("four", 4);
numbers.put("five", 5);
numbers.put("six", 6);
numbers.put("seven", 7);
numbers.put("height", 8);
numbers.put("nine", 9);
numbers.put("ten", 10);

List<String> list = new ArrayList<>();
list.add("one");
list.add("ten");
list.add("six");
list.add("two");

Collections.sort(list, (o1, o2) -> {
    return numbers.get(o1) - numbers.get(o2);
});
System.out.println(list);

输出量

[one, two, six, ten]

快速简便的解决方案:

List<String> allNumbers = Arrays.asList("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten");
Collections.sort(list, (i1, i2) -> allNumbers.indexOf(i1) - allNumbers.indexOf(i2));

使用带有索引字符串键的HashMap获得更快的算法(如果您有10个值,则没有任何区别)。

Java没有提供开箱即用的方式来对String进行排序。
您可以使用一个Comparator根据该规则比较两个String的值。

一种有效的方法是在Comparator类中创建要排序的所有String,并使用元素的索引来了解其顺序。

例如 :

public class MyNumberInStringComparator implements Comparator<String> {

    private static List<String> numbers = Arrays.asList("one", "two", "three");             


    @Override
    public int compare(String o1, String o2) {
        return Integer.compare(numbers.indexOf(o1),numbers.indexOf(o2));
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM