已复制
全屏展示
复制代码

Java 中List Map Stream排序总结


· 2 min read

注意:compare 方法返回值含义

< return -1
= return  0
> return  1

一. List排序

  • 方法:调用 List 对象的 sort 方法,传入实现了 Comparator 接口的 compare 方法的匿名类。
  • 降序:compare 方法返回相反数,比如 return -o1.compareTo(o2);
public class Main {
    public static void main(String[] args) {
        List<String> stringList = new ArrayList<>(){{
            add("e");
            add("a");
            add("c");
            add("f");
            add("g");
        }};
        stringList.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        System.out.println(stringList);
    }
}

二. Map排序

2.1 按照Key排序

  • 使用TreeMap来实现按照Key排序,TreeMap实现了红黑树的结构,形成了一颗二叉树,它的Key是有序的,可以自定义一个比较器
public class Main {
    public static void main(String[] args) {
        SortedMap<String, Integer> treeMap = new TreeMap<String, Integer>(new Comparator<String>() {
            @Override
            public int compare(String key1, String key2) {
                return key1.compareTo(key2);
            }
        });

        treeMap.put("d", 3);
        treeMap.put("b", 1);
        treeMap.put("a", 0);
        treeMap.put("c", 2);

        System.out.println(treeMap);
    }
}

2.2 按照Value排序

  • 将 Map 转换成 List<Map.Entry<String, Integer>> 结构,然后利用List的sort方法。
  • 可以按照Key排序,也可以按照Value排序。
public class Main {
    public static void main(String[] args) {
        Map<String, Integer> hashMap = new HashMap<>(){{
            put("d", 3);
            put("b", 1);
            put("a", 0);
            put("c", 2);
        }};

        List<Map.Entry<String, Integer>> entryList = new ArrayList<>(hashMap.entrySet());
        entryList.sort(new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }
        });

        System.out.println(entryList);
    }
}

三. Stream排序

  • 同样是实现 Comparator 接口
package org.example;

import lombok.Data;

import java.util.Comparator;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Stream<Person> personStream = Stream.of(new Person(9),
                new Person(10),
                new Person(11),
                new Person(3),
                new Person(8)
        );
        Stream<Person> sortedPerson = personStream.sorted(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                int result = 0;
                if (o1.age < o2.age) {
                    result = -1;
                } else if (o1.age > o2.age) {
                    result = 1;
                }
                return result;
            }
        });

        System.out.println(sortedPerson.collect(Collectors.toList()));
    }

    @Data
    public static class Person {
        int age;
        public Person(int age) {
            this.age = age;
        }
    }

}
🔗

文章推荐