JDK 1.8 新特性使用小技巧总结

作者:青山常在人不老   阅读 (2352)  |  收藏 (1)  |  点赞 (0)

摘要

本文总结了JDK 1.8中新特性的使用技巧


原文链接:JDK 1.8 新特性使用小技巧总结


1、list转为以逗号分隔的String

传统方式1:

Joiner.on(",").join(list)

传统方式2:

String.join(",",list);

此方法要求接收对象和原对象类型一致

JDK1.8方式:

list.stream().map(String::valueOf).collect(Collectors.joining(","));

2、list按照列表中某个属性转为map

假设有一个List<UserInfo>对象,想要根据id作为key转换为Map

List<UserInfo> list = new ArrayList<>();
Map<Integer,UserInfo> map = list.stream().collect(Collectors.toMap(e -> e.getId(), e -> e, (v1, v2) -> v1))

3、字符串按照逗号切割后转为list数组

String  str = "1,23,23,11,6";
List<Integer> listIds = Lists.newArrayList(str.split(",")).stream().map(s -> Integer.parseInt(s.trim())).collect(Collectors.toList());

4、list根据某个字段分组转为map

Map<String,List<UserInfo>> map = list.stream().collect(Collectors.groupingBy(UserInfo::getSex);

5、求list中的最大值、最小值、和、均值

假设Employee包含age属性。

int sum = empList.stream().mapToInt(Employee->Employee.getAge()).sum();
int max = empList.stream().mapToInt(Employee->Employee.getAge()).max().getAsInt();
int min = empList.stream().mapToInt(Employee->Employee.getAge()).min().getAsInt();
double avg = empList.stream().mapToInt(Employee->Employee.getAge()).average().getAsDouble();

6、List排序,忽略为null的情况

list.sort(Comparator.comparing(User::getName, Comparator.nullsLast(String::compareTo)));

上述方法中为正序排序,且如果属性为null,则放到最后

如果要降序排序,使用如下格式

list.sort(Comparator.comparing(User::getName, Comparator.nullsLast(String::compareTo)).reversed());

如果想要属性为null时,放置在前面,则

list.sort(Comparator.comparing(User::getName, Comparator.nullsFirst(String::compareTo)));

7、list多个属性同时参与排序

Comparator<User> byDisplacement = Comparator.comparing(User::getDisplacement, Comparator.nullsLast(String::compareTo)); //.reversed(); 降序
Comparator<User> byHorsepower = Comparator.comparing(User::getHorsepower, Comparator.nullsLast(String::compareTo));
Comparator<User> byAirIntake = Comparator.comparing(User::getAirIntake, Comparator.nullsLast(String::compareTo));
Comparator<User> finalComparator = byDisplacement.thenComparing(byHorsepower)
        .thenComparing(byAirIntake);
List<User> sortResult = list.stream().sorted(finalComparator).collect(Collectors.toList());

此语句表示上面三个字段同时参与排序

8、java将List按照一定的大小分成多个List(分割List)

List<List<Integer>> partition = ListUtils.partition(integers, 100);

分类   生活随笔
字数   2115

博客标签    JDK1.8新特性总结  

评论