三亚文明城市建设服务中心报名网站,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());}}感 谢 各 位 大 佬 的 阅 读随 手 点 赞日 薪 过 万~