java 8
时间:2020-10-26 09:54:56
收藏:0
阅读:127
一. java8总结:三大改进
1. Stream API
2. 向方法传递代码的技巧
3. 接口中的默认方法
示例:学生信息
# lombok 学生信息
示例:判空
#判空
public static void show1(List<Student> list){
list.filter(x->x!=null);
list.filter(Objects::nonNull);
}
?
?
# 按成绩排序 -- 升序
public static void show1(List<Student> list) {
#方式一
//Collections 升序
Collections.sort(list,new Comparator<Student>(){
示例:筛选&分组
# 统计全校所有的学生: 1.成绩>=80分 且 2.每个分数对应的学生信息
public static void show1(List<Student> list){
Map<Float, List<Student>> collect =
list.stream().filter(x->x.getScore()>=80).collect(Collectors.groupingBy(Student::getScore));
}
示例:求和
# 整数求和
int sum = list.stream().mapToInt(Student::getAge).sum();
?
# float double 求和
double sum2 = list.stream().mapToDouble(Student::getScore).sum();
?
#BigDecimal 求和
BigDecimal sum3 = list.stream().map(Student::getMoney).reduce(BigDecimal.ZERO,BigDecimal::add);
示例:重写求和方法
class BigDecimalUtils {
public static BigDecimal ifNullSet0(BigDecimal num) {
return null == num ? BigDecimal.ZERO : num;
}
?
public static BigDecimal sum(BigDecimal... nums) {
BigDecimal result = BigDecimal.ZERO;
for (BigDecimal num : nums) {
result.add(ifNullSet0(num));
}
return result;
}
}
?
#BigDecimal求和
BigDecimal sum4 = list.stream().map(Student::getMoney).reduce(BigDecimal.ZERO, BigDecimalUtils::sum);
示例:最大值、最小值
# 最大年龄
Integer maxAge = list.stream().map(Student::getAge).max(Integer::compareTo).get();
?
# 最小出生日期
Date minBirthDate = list.stream().map(Student::getBirthDate).min(Date::compareTo).get();
?
#钱最多的
BigDecimal maxMoney = list.stream().map(Student::getMoney).max(BigDecimal::compareTo).get();
示例:去重
#去重:会调用 student的hashcode equals方法
list.stream().distinct().collect(Collectors.toList())
示例:获取某个值
#获取id列表
List<Integer> ids = list.stream().map(Student::getId).collect(Collectors.toList());
示例:list 转 map
/**
* List -> Map
* 需要注意的是:
* toMap 如果集合对象有重复的key,会报错Duplicate key ....
* student1,student2的id都为1。
* 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
*/
Map<Integer, Student> mapStus = list.stream().collect(Collectors.toMap(Student::getId,a->a,(k1,k2)->k1));
原文:https://www.cnblogs.com/mxxiao/p/13876098.html
评论(0)