首页 > 编程语言 > 详细

java 8

时间:2020-10-26 09:54:56      阅读:127      评论:0      收藏:0      [点我收藏+]

java 8 

一. java8总结:三大改进

1. Stream API

2. 向方法传递代码的技巧

3. 接口中的默认方法

示例:学生信息

# lombok 学生信息
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
   private Integer id;
private String name;
private Integer age;
private Float score;
private Date birthDate;
private BigDecimal money;
}

示例:判空

#判空
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>(){
       @Override
       public int compare(Student s1,Student s2){
      return s1.getScore().compareTo(s2.getScore());
      }
  });
   //collections 降序
   Collections.sort(list,new Comparator<Student>(){
      @Override
       public int compare(Student s1,Student s2){
           return s2.getScore().compareTo(s1.getScore());
      }
  });
}
# 方式二 list.sort()
public static void show2(List<Student> list) {    
   # Comparator.comparing -- 升序
     list.sort(Comparator.comparing(Student::getScore));
   # Comparator.comparing --降序
     list.sort(Comparator.comparing(Student::getScore).reversed());
}
?
#方式三: list.stream().sorted()
public static void show3(List<Student> list) {    
   # Comparator.comparing --升序
   list.stream().sorted(Comparator.comparing(Student::getScore))    
   #Comparator.comparing --降序
   list.stream().sorted(Comparator.comparing(Student::getScore()).reversed());
}
# 先按成绩降序排序,再按年龄升序排序
public static void show4(List<Student> list){
   list.sort(Comparator.comparing(Student::getScore).reversed().thenComparing(Student::getAge));
}
?

示例:筛选&分组

# 统计全校所有的学生: 1.成绩>=802.每个分数对应的学生信息
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));

 

java 8

原文:https://www.cnblogs.com/mxxiao/p/13876098.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!