工作中常用到的 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));
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 5
智慧源点
关注
终身学习、研究java架构、ai大模型 2019-12-06 加入
商业合作: wytwhdwdd
评论