写点什么

工作中常用到的 java8 相关操作总结

作者:智慧源点
  • 2024-01-21
    北京
  • 本文字数:2483 字

    阅读完需:约 8 分钟

1、List 相关操作

        Person person = new Person();        person.setName("4");        person.setAge(16);        person.setWeight(15L);        person.setGroup("group1");
//升序 list.sort(Comparator.comparing(Person::getAge)); //降序 list.sort(Comparator.comparing(Person::getAge).reversed()); //年龄一样,则按照姓名排序 list.sort(Comparator.comparing(Person::getAge).thenComparing(Person::getName));
//年龄小于10,然后按重量排序 list.stream().filter(item -> item.getAge() < 10) .sorted(Comparator.comparing(Person::getWeight)) .collect(Collectors.toList()); //distinct去重 list.stream().filter(item -> item.getAge() > 10) .distinct() .collect(Collectors.toList()); //skip筛选跳跃 list.stream().filter(item -> item.getAge() > 10) .skip(2) .collect(Collectors.toList()); //map映射 List<String> names = list.stream().filter(item -> item.getAge() > 10) .map(Person::getName) .collect(Collectors.toList());
//anyMatch匹配 list.stream().anyMatch(item -> item.getAge() > 10); //allMatch全部匹配 list.stream().allMatch(item -> item.getAge() > 10); //noneMatch匹配,有一个匹配就返回false list.stream().noneMatch(item -> item.getAge() > 10);
//findAny任意元素 Person person5 = list.stream().filter(item -> item.getAge() > 10) .findAny().orElse(null); //findFirst第一个元素 Person person6 = list.stream().filter(item -> item.getAge() > 10) .findFirst().orElse(null);
//元素求和 Integer totalAge = list.stream().map(Person::getAge).reduce(0, (a, b) -> a + b); Integer totalAge1 = list.stream().map(Person::getAge).reduce(0, Integer::sum); Integer total = list.stream().collect(Collectors.summingInt(Person::getAge)); Integer tt = list.stream().mapToInt(Person::getAge).sum(); System.out.println(tt);
//最大、最小值 Integer max = list.stream().map(Person::getAge).reduce(0, Integer::max); Integer max1 = list.stream().map(Person::getAge).reduce(Integer::max).get();
//连接字符串 String name = list.stream().map(Person::getName).collect(Collectors.joining(",")); System.out.println(name);
//分组 Map<String, List<Person>> map = list.stream().collect(Collectors.groupingBy(Person::getName)); Map<String, Integer> nameMap = list.stream().collect(Collectors.toMap(Person::getName, Person::getAge)); Map<String, Person> personMap1 = list.stream().collect(Collectors.toMap(Person::getName, Function.identity())); Map<String, Person> personMap2 = list.stream().collect(Collectors.toMap(e -> e.getName() + "wyt", Function.identity())); //分组排重,取第二个元素 Map<String, Person> personMap3 = list.stream().collect(Collectors.toMap(Person::getName, e -> e, (e1, e2) -> e2)); System.out.println(personMap3); //先按名字分组,然后找年龄最大的分组 Map<String, Person> personMap = list.stream().collect(Collectors.groupingBy(Person::getGroup, Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(Person::getAge)), Optional::get))); System.out.println(personMap);
复制代码

2、optional 和时间相关操作

创建 Optional 对象

创建一个空的 Optional

Optional<Person> personOpt = Optional.empty()

创建一个非空的 Optional

Optional<Person> personOpt = Optional.of(person)

Optional.of()不接受空值。如果 person 是一个空值则会抛出 NullPointException 异常,而不是等你试图访问 person 的属性才抛出异常。

创建一个可接受空值的 Optional

Optional<Person> personOpt = Optional.ofNullable(Person)

如果 person 是 null ,那么得到的 Optional 对象就是个空对象。

使用 map

Optional 中的 map()方法和流中的 map()相似,都是从 Optional 对象中提取和转换值

        //optional使用        String name1 = Optional.ofNullable(person1).map(Person::getName).orElse("");        System.out.println(name1);
//localDate LocalDate localDate = LocalDate.of(2023,11, 1); System.out.println(localDate);
LocalTime localTime = LocalTime.of(12,2,3); System.out.println(localTime);
LocalDateTime localDateTime = LocalDateTime.of(2023,11,2, 12,3,24); System.out.println(localDateTime);
//两个时间间隔 Long days = LocalDateTimeUtil.between(LocalDateTime.now(), LocalDateTime.now().plusDays(1)).toDays(); System.out.println(days); //时间比较 if(LocalDateTime.now().isBefore(LocalDateTime.now().plusDays(1))) { System.out.println(true); } //开始时间和结束时间 System.out.println(LocalDateTime.of(LocalDate.now(), LocalTime.MIN)); System.out.println(LocalDateTime.of(LocalDate.now(), LocalTime.MAX));
复制代码


用户头像

智慧源点

关注

终身学习、研究java架构、ai大模型 2019-12-06 加入

商业合作: wytwhdwdd

评论

发布
暂无评论
工作中常用到的java8相关操作总结_stream_智慧源点_InfoQ写作社区