当前位置: 首页 > 图灵资讯 > 技术篇> Java8集合List排序、筛选、求和、求最大值、平均值、List转Map

Java8集合List排序、筛选、求和、求最大值、平均值、List转Map

来源:图灵教育
时间:2023-07-05 17:36:18

Java8集List排序,筛选

1. List

元素有序

元素可重复

1.1 ArrayList

实现动态数组

查询快

增删慢(末尾也快)

1.2 LinkedList

链表实现

查询慢

增删快

1.3 与LinkedList相比,ArrayList和LinkedList

实现

查询

增删

线程安全?

ArrayList

动态数组

慢(末端也快)

不安全

LinkedList

链表

不安全

ArrayList:

默认初始化容量为10,每次扩容时增加原始容量的一半,即变为原始容量的1.5倍。

LinkedList:

底层实现是双向链表。

在增加和删除元素时效率更高。

1.4 List过滤指定元素

1.4.1 Listt准备测试

public class Message {  private Long id;  //id   private String msg; //消息   private Date sendTime; //时间戳  //省略get set}

Java8集合List排序、筛选、求和、求最大值、平均值、List转Map_java8

//返回Listprivate static List<Message> getMessageList(){    List<Message> list = new ArrayList<>();    list.add(new Message(1L, "a", new Date()));    list.add(new Message(2L, "b", new Date()));    list.add(new Message(4L, "b", new Date()));    list.add(new Message(3L, "c", new Date()));    return list;  }

Java8集合List排序、筛选、求和、求最大值、平均值、List转Map_List_02

1.4.2 使用iterator来体验Listttor

private static void TestArrayList(){    List<Message> list = getMessageList();    System.out.print(“删除前:”);    list.stream().forEach(item -> System.out.print(item));     Iterator<Message> it = list.iterator();    while (it.hasNext()) {      Message s = it.next();      if (s.getMsg().equals("b")) {        it.remove();      }    }     System.out.print(\n删除后:;    list.stream().forEach(item -> System.out.print(item));}

Java8集合List排序、筛选、求和、求最大值、平均值、List转Map_升序_03

1.4.2 使用Java8对List过滤器进行筛选

private static void filterList(){  List<Message> list1 = getMessageList();  ///过滤所有msg都是b记录  List<Message> list2 = list1.stream().filter(s -> !s.getMsg().equals("b")).collect(Collectors.toList());  list2.stream().forEach(item -> System.out.println(item));}

Java8集合List排序、筛选、求和、求最大值、平均值、List转Map_升序_04

1.4.3 使用toset去重

///使用distinct重量 List<String> distinctMsg = list.stream().map(Message::getMsg).distinct().collect(Collectors.toList());distinctMsg.forEach(System.out::println);

Java8集合List排序、筛选、求和、求最大值、平均值、List转Map_升序_05

1.4.3 使用distinct去重量

使用collecct//(toSet()去重Set<String> distinctmsg2 = list.stream().map(Message::getMsg).collect(toSet());distinctmsg2.forEach(System.out::println);

Java8集合List排序、筛选、求和、求最大值、平均值、List转Map_List_06

1.5 使用Java8对List排序

private static void sortList(){   List<Message> list = getMessageList();   if (list != null && !list.isEmpty()){     System.out.println(==========);     list.stream().forEach(item -> System.out.println(item));      ////按ID排序     list.sort((a, b) -> a.getId().compareTo(b.getId()));      ///按ID升序排序(简写)     list.sort(Comparator.comparing(Message::getId));      //按Id降序排序(简写)     list.sort(Comparator.comparing(Message::getId).reversed());           System.out.println(===排序后如下===);     list.stream().forEach(item -> System.out.println(item));   } }

Java8集合List排序、筛选、求和、求最大值、平均值、List转Map_升序_07

1.5.2 多个字段的组合排序

private static void sortList(){  List<Message> list = getMessageList();  if (list != null && !list.isEmpty()){    System.out.println(==========);    list.stream().forEach(item -> System.out.println(item));     //按多条件组合排序,先按msg(升序)排序,然后根据id(升序)    list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Message::getId));     //按多条件组合排序,先按msg(升序)排序,然后根据id(降序)    list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Comparator.comparing(Message::getId).reversed()));     //按多条件组合排序,先按msg(降序),再按id(降序)    list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Message::getId).reversed());     //按多条件组合排序,先按msg(降序)排序,然后根据id(升序)    list.sort(Comparator.comparing(Message:: getMsg).reversed().thenComparing(Message::getId));     System.out.println(===排序后如下===);    list.stream().forEach(item -> System.out.println(item));  }}

Java8集合List排序、筛选、求和、求最大值、平均值、List转Map_java8_08