Java 8 List

排序

依据自定义对象的某个属性进行排序.

List<Student> students = Arrays.asList(student1, student2, student3);

students.sort(Comparator.comparing(Student::getScore).reversed());

students.sort(Collections.reverseOrder(Comparator.comparing(Student::getScore)));

List<Student> sorted = students.stream().sorted(Comparator.comparing(Student::getScore).reversed()).collect(
    Collectors.toList());

Java 8 之前版本的排序方法可参考这里: http://stackoverflow.com/a/2784576

分组

分组是将 List 中的对象按照某一属性进行分组并做聚合或统计:

Map<KeyType, List<ClassName>> map1 = List.stream().collect(Collectors.groupingBy(ClassName::getFieldName, Collectors.toList()));

Map<KeyType, Long> map = List.stream().collect(Collectors.groupingBy(ClassName::getFieldName, Collectors.counting()))

分区

List 依据某一标准分割为两组.

Map<Boolean, Map<String, Long>> map = students.stream()
    .collect(
        Collectors.partitioningBy(item -> item.getScore() > 60,
            Collectors.groupingBy(Student::getName, Collectors.counting())
        )
    );

List 分割成多个组, 每个组有指定数量的元素(依赖 Apache Commons Collections):

List<List<T>> ListUtils::partition(List<T> list, int size);

List<List<Student>> lists = ListUtils.partition(students, 2);

参考链接:

聚合

求和:

int result = Stream.of(1, 2, 3, 4).sum();
int result = Stream.of(1, 2, 3, 4).reduce(0, Integer::sum);
int result = Stream.of(1, 2, 3, 4).reduce(0, (sum, item) -> sum + item);
int result = Stream.of(1, 2, 3, 4).collect(Collectors.summingInt(Integer::intValue));

参考链接:

删除值为 null 的元素

List 中有多个 null 元素时, List.remove(null) 只能移除第一个 null 元素, 可使用 List.removeAll(Collections.singletonList(null)) 移除所有的 null 元素.

public static void main(String[] args) {
    List<String> list1 = new ArrayList<>();
    list1.add(null);
    list1.add(null);
    list1.add("2");
    list1.add("3");
    list1.remove(null);
    System.out.println(list1);//[null, 2, 3]

    List<String> list2 = new ArrayList<>();
    list2.add(null);
    list2.add(null);
    list2.add("2");
    list2.add("3");
    list2.removeAll(Collections.singletonList(null));
    System.out.println(list2);//[2, 3]
}

参考链接: Java remove all null elements from list

posted @ 2017-04-07 23:28  whilst  阅读(1871)  评论(0编辑  收藏  举报