List 在Java8中的花式用法

花式1:迭代器(Iterator)

Iterator iter = list.iterator(); //.iterator():将集合转换为迭代器模式
while (iter.hasNext()){ //.hasNext():判断是否有元素没有被遍历,如果有,则返回true。
   int num = (int) iter.next(); //.next():返回游标当前位置的元素,并将游标移动到下一位。
   if (num < 5){
       //删除游标左边的元素,在执行完next之后,该元素只能被执行一次
       iter.remove();
   }
}
System.out.println(list.toString());

花式2:快速筛选数据

  • // .stream() 转换为流
  • // .filter() 通过筛选条件筛选元素
  • // .collect(Collectors.toList()); 返回列表
  • // .collect(Collectors.joining(“,”)); 返回字符串
  • // .findFirst(); 符合条件的第一个元素
  • // .isPresent(); 判断元素是否存在元素
  • // .map() 快速获取集合中的某列元素 -1
  • // .forEach() 快速获取集合中的某列元素 -2
public void filterUse() {
        // 测试数据,请不要纠结数据的严谨性
        List<StudentEntity> studentList = new ArrayList<>();
        studentList.add(new StudentEntity("李小明", true, 18, 1.76, "1999-1-12"));
        studentList.add(new StudentEntity("张小丽", false, 18, 1.61, "2000-3-14"));
        studentList.add(new StudentEntity("王大朋", true, 19, 1.82, "2001-5-22"));
        studentList.add(new StudentEntity("陈小跑", false, 17, 1.67, "2002-4-6"));

        // 查询身高在1.8米以上的男生(true)
        List<StudentEntity> boys = studentList.stream()
           .filter(a -> a.getGender() && a.getHeight() >=1.8).collect(Collectors.toList());
        System.out.println("身高在1.8米以上的男生:" + boys.toString());

        // .findFirst() 获取第一个男生
        Optional<StudentEntity> body 
                             = studentList.stream().filter(b -> b.getGender()).findFirst();
        // .isPresent() 查询 body 下是否存在元素
        if (body.isPresent()) {
            System.out.println("获取到第一个男生是:" + body);
        } else {
            System.out.println("值为空:" + body.isPresent());
        }

        // .map() 快速获取集合中的某列元素
        List<String> studentNameList = studentList.stream()
                                  .map(StudentEntity::getName).collect(Collectors.toList());
        System.out.println("学生姓名集合1:" + studentNameList.toString());

        // .forEach() 快速获取集合中的某列元素
        List<String> studentNames = new ArrayList<>();
        studentList.forEach(s -> studentNames.add(s.getName()));
        System.out.println("学生姓名集合2:" + studentNames.toString());
    }

花式3:排序

  • 按时间排序
orders.sort((t1, t2) -> t2.getPayTime().compareTo(t1.getPayTime()));
 public static void main(String[] args) {
    Order order1 = new Order("1101", "2019-11-03 00:30:36", 100);
    Order order2 = new Order("1102", "2019-11-03 00:30:32", 200);
    Order order3 = new Order("1103", "2019-11-03 00:30:33", 300);
    Order order4 = new Order("1104", "2019-11-03 00:30:34", 400);
    Order order5 = new Order("1105", "2019-11-03 00:30:35", 500);
    List<Order> orders = new ArrayList<>();
    orders.add(order2);
    orders.add(order1);
    orders.add(order4);
    orders.add(order3);
    orders.add(order5);
    System.out.println("------------排序前-----------------");
    for (Order order : orders) {
        System.out.println("orderNum=" + order.getOrderNum() + ",payTime=" + order.getPayTime());
    }
    //不管是Date、String、Long类型的日期都可以排序,无需转换
    orders.sort((t1, t2) -> t2.getPayTime().compareTo(t1.getPayTime()));
    System.out.println("------------倒序后-----------------");
    for (Order order : orders) {
        System.out.println("orderNum=" + order.getOrderNum() + ",payTime=" + order.getPayTime());
    }
}