三亚文明城市建设服务中心报名网站,seo培训机构,泰安网上车管所,做存储各种环境信息的网站文章目录 Java8 BiConsumerT, U 函数接口浅析分享#xff08;含示例#xff0c;来戳#xff01;#xff09;源码accept 方法示例示例一示例二 andThen 方法示例示例一示例二 示例相关代码类dohandler 方法student.javaStudentScore.javaStudentScoreDto.java Java8… 文章目录 Java8 BiConsumerT, U 函数接口浅析分享含示例来戳源码accept 方法示例示例一示例二 andThen 方法示例示例一示例二 示例相关代码类dohandler 方法student.javaStudentScore.javaStudentScoreDto.java   Java8 BiConsumerT, U 函数接口浅析分享含示例来戳 
您的点赞、收藏、评论是博主输出优质文章的的动力 
欢迎在评论区与博主沟通交流Java8 系列文章持续更新大佬们关注我种个草不亏   学起来开整Java8 BiConsumerT, U函数接口使用分享。 BiConsumerT, U 跟我们熟悉的 Consumer T 很像核心思想也是一样的两者都是表达消费的意思 
源码 
BiConsumerT, U 提供了两个方法 
void accept(T t, U u)传入两个泛型参数当然方法实现想怎么用自己玩可以看下面示例场景BiConsumerT, U andThen(BiConsumer? super T, ? super U after)可以理解为在执行 accept 方法前先执行一个前置方法前置方法执行完成后会接着执行 accept 方法 
源码 
FunctionalInterface
public interface BiConsumerT, U {void accept(T t, U u);default BiConsumerT, U andThen(BiConsumer? super T, ? super U after) {Objects.requireNonNull(after);return (l, r) - {accept(l, r);after.accept(l, r);};}
}accept 方法示例 
tips: 需要配合文末示例相关代码类食用 
示例一 
查询所有学生的成绩 Testpublic void test() {StudentScoreDto studentScoreDto  new StudentScoreDto();Student student  new Student();this.doHandler(student, studentScoreDto, StudentAssemble::queryList, StudentAssemble::calcSort);System.out.println(JSONObject.toJSONString(studentScoreDto));}执行结果 示例二 
查询 “张三” 同学的成绩 Testpublic void test() {StudentScoreDto studentScoreDto1  new StudentScoreDto();Student student1  new Student();student1.setName(张三);this.doHandler(student1, studentScoreDto1, StudentAssemble::queryList, StudentAssemble::calcSort);System.out.println(JSONObject.toJSONString(studentScoreDto1));}执行结果 andThen 方法示例 
示例一 查询所有学生的成绩并且输出第一名是哪位同学 
Testpublic void test() {StudentScoreDto studentScoreDto2  new StudentScoreDto();Student student2  new Student();this.doHandler(student2, studentScoreDto2, StudentAssemble::queryList, StudentAssemble::calcSort, StudentAssemble::findFirst);System.out.println(JSONObject.toJSONString(studentScoreDto2));}执行结果 
示例二 
查询所有学生的成绩并且输出 “李四” 同学的排名和总分 
Testpublic void test() {StudentScoreDto studentScoreDto3  new StudentScoreDto();studentScoreDto3.setName(李四);Student student3  new Student();this.doHandler(student3, studentScoreDto3, StudentAssemble::queryList, StudentAssemble::calcSort, StudentAssemble::findFirst);System.out.println(JSONObject.toJSONString(studentScoreDto3));}执行结果 示例相关代码类 
tips: 需要配合文末示例相关代码类食用 
dohandler 方法 
tip注意这里是方法  public void doHandler(Student student,StudentScoreDto dto,FunctionStudent, ListStudentScore func1,BiConsumerListStudentScore, StudentScoreDto func2) {ListStudentScore apply  func1.apply(student);func2.accept(apply, dto);}public void doHandler(Student student,StudentScoreDto dto,FunctionStudent, ListStudentScore func1,BiConsumerListStudentScore, StudentScoreDto func2,BiConsumerListStudentScore, StudentScoreDto func3) {ListStudentScore apply  func1.apply(student);func2.accept(apply, dto);func3.andThen(func2).accept(apply, dto);}student.java 
AllArgsConstructor
NoArgsConstructor
Data
public class Student {/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 生日*/JSONField(formatyyyy-MM-dd HH:mm:ss)private Date birthday;/*** 学号*/private Integer num;Overridepublic String toString() {return Student{ name  name  \ , age  age , birthday  birthday , num  num };}StudentScore.java 
AllArgsConstructor
NoArgsConstructor
Data
public class StudentScore {/*** 名称*/private String name;/*** 科目*/private String subject;/*** 成绩*/private Integer score;}StudentScoreDto.java 
AllArgsConstructor
NoArgsConstructor
Data
public class StudentScoreDto {/*** 名称*/private String name;/*** 科目*/private String subject;/*** 成绩*/private Integer score;/*** 个人排名*/private Integer rank;/*** 全班排名*/private ListStudentScoreDto rankList;}StudentAssemble.java 
public class StudentAssemble {/*** 查询学生成绩列表** param student 学生实体对象* return 学生成绩集合*/public static ListStudentScore queryList(Student student) {// 模拟查询学生信息ListStudentScore studentScores  Arrays.asList(new StudentScore(张三, 语文, 81),new StudentScore(张三, 数学, 88),new StudentScore(张三, 英语, 90),new StudentScore(李四, 语文, 72),new StudentScore(李四, 数学, 97),new StudentScore(李四, 英语, 77),new StudentScore(王五, 语文, 95),new StudentScore(王五, 数学, 62),new StudentScore(王五, 英语, 92));if (Objects.isNull(student) || StringUtils.isEmpty(student.getName())) {return studentScores;}String name  student.getName();return studentScores.stream().filter(e - name.equals(e.getName())).collect(Collectors.toList());}/*** 计算总分以及排名** param studentScoreList 学生成绩集合* param studentScoreDto  学生成绩DTO*/public static void calcSort(ListStudentScore studentScoreList, StudentScoreDto studentScoreDto) {if (studentScoreList  null || studentScoreList.size()  0) {return;}ListStudentScoreDto tempList  new ArrayList();MapString, ListStudentScore studentScoreMap  studentScoreList.stream().collect(Collectors.groupingBy(StudentScore::getName));for (ListStudentScore value : studentScoreMap.values()) {if (value  null || value.size()  0) continue;StudentScore studentScore  value.get(0);// 汇总学生总成绩如果成绩不存在则直接给0Integer sumScore  value.stream().map(StudentScore::getScore).reduce(Integer::sum).orElse(0);StudentScoreDto resultDto  new StudentScoreDto();resultDto.setName(studentScore.getName());resultDto.setScore(sumScore);tempList.add(resultDto);}AtomicInteger counter  new AtomicInteger(1);// 处理排名ListStudentScoreDto resultList  tempList.stream().sorted(Comparator.comparing(StudentScoreDto::getScore).reversed()).collect(Collectors.toList());resultList.forEach(e - e.setRank(counter.getAndIncrement()));studentScoreDto.setRankList(resultList);}/*** 查询学生成绩** param studentScoreList 学生成绩集合* param studentScoreDto  学生成绩DTO*/public static void findFirst(ListStudentScore studentScoreList, StudentScoreDto studentScoreDto) {if (studentScoreList  null || studentScoreList.size()  0) {return;}ListStudentScoreDto rankList  studentScoreDto.getRankList();if (StringUtils.isEmpty(studentScoreDto.getName())) {// 学生名称为空则输出第一名OptionalStudentScoreDto first  rankList.stream().min(Comparator.comparing(StudentScoreDto::getRank));if (first.isPresent()) {StudentScoreDto studentScoreDto1  first.get();System.out.println(第一名是  studentScoreDto1.getName()  , 总分  studentScoreDto1.getScore());}return;}// 学生名称不为空则输出学生排名OptionalStudentScoreDto first  rankList.stream().filter(e - studentScoreDto.getName().equals(e.getName())).findFirst();if (first.isPresent()) {StudentScoreDto studentScoreDto1  first.get();System.out.println(studentScoreDto1.getName()   排名  studentScoreDto1.getRank()  , 总分  studentScoreDto1.getScore());}}感 谢 各 位 大 佬 的 阅 读随 手 点 赞日 薪 过 万~