Java8 stream collect用法
import static java.util.stream.Collectors.*;
import com.alibaba.fastjson.JSON;
import java.util.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author huibin
* @date 2025/6/4 17:17
*/
public class Java8StreamDemo {
static final String MALE = "男";
static final String FEMALE = "女";
@Data
@AllArgsConstructor
@NoArgsConstructor
static class Student {
/** 年级 */
private String grade;
/** 性别 */
private String gender;
/** ID */
private String id;
/** 总分 */
private double totalScore;
/** 兴趣爱好 */
private List<Hobby> hobbies;
}
/** 兴趣爱好 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
static class Hobby {
/** 兴趣爱好名称 */
private String name;
/** 兴趣打分 */
private double score;
}
private static List<Student> initStudents(String grade1, String grade2, String grade3) {
List<Student> studentList = new ArrayList<>();
studentList.add(new Student(grade1, FEMALE, "100", 460, Arrays.asList(Hobby.builder().name("跳绳").score(100).build())));
studentList.add(new Student(grade2, MALE, "101", 479, Arrays.asList(Hobby.builder().name("跳绳").score(30).build(), Hobby.builder().name("跑步").score(80).build())));
studentList.add(new Student(grade3, MALE, "102", 472, Arrays.asList(Hobby.builder().name("跳绳").score(64).build(), Hobby.builder().name("跑步").score(34).build())));
studentList.add(new Student(grade1, FEMALE, "103", 662, Arrays.asList(Hobby.builder().name("跳绳").score(43).build())));
studentList.add(new Student(grade2, MALE, "104", 483, Arrays.asList(Hobby.builder().name("跳绳").score(77).build())));
studentList.add(new Student(grade3, MALE, "105", 662, Arrays.asList(Hobby.builder().name("跳绳").score(78).build())));
studentList.add(new Student(grade2, MALE, "106", 575, Arrays.asList(Hobby.builder().name("跳绳").score(57).build())));
studentList.add(new Student(grade1, FEMALE, "107", 462, Arrays.asList(Hobby.builder().name("跳绳").score(76).build(), Hobby.builder().name("飞盘").score(77).build(), Hobby.builder().name("跑步").score(84).build())));
studentList.add(new Student(grade2, MALE, "108", 272, Arrays.asList(Hobby.builder().name("跳绳").score(78).build())));
studentList.add(new Student(grade3, MALE, "109", 376, Arrays.asList(Hobby.builder().name("跳绳").score(88).build())));
studentList.add(new Student(grade2, FEMALE, "110", 459, Arrays.asList(Hobby.builder().name("跳绳").score(99).build())));
studentList.add(new Student(grade1, MALE, "111", 472, Arrays.asList(Hobby.builder().name("跳绳").score(67).build())));
studentList.add(new Student(grade2, MALE, "112", 477, Arrays.asList(Hobby.builder().name("跳绳").score(34).build(), Hobby.builder().name("跑步").score(99).build())));
studentList.add(new Student(grade3, FEMALE, "113", 670, Arrays.asList(Hobby.builder().name("跳绳").score(56).build())));
studentList.add(new Student(grade2, MALE, "114", 472, Arrays.asList(Hobby.builder().name("跳绳").score(87).build())));
studentList.add(new Student(grade1, FEMALE, "115", 556, Arrays.asList(Hobby.builder().name("跳绳").score(98).build(), Hobby.builder().name("跑步").score(32).build())));
studentList.add(new Student(grade2, FEMALE, "116", 466, Arrays.asList(Hobby.builder().name("跳绳").score(89).build())));
studentList.add(new Student(grade3, MALE, "117", 490, Arrays.asList(Hobby.builder().name("跳绳").score(68).build())));
studentList.add(new Student(grade2, FEMALE, "118", 492, Arrays.asList(Hobby.builder().name("跳绳").score(86).build())));
studentList.add(new Student(grade1, FEMALE, "119", 260, Arrays.asList(Hobby.builder().name("跳绳").score(67).build(), Hobby.builder().name("跑步").score(24).build())));
studentList.add(new Student(grade2, FEMALE, "120", 455, Arrays.asList(Hobby.builder().name("跳绳").score(100).build())));
studentList.add(new Student(grade2, MALE, "121", 272, Arrays.asList(Hobby.builder().name("跳绳").score(65).build(), Hobby.builder().name("跑步").score(68).build())));
studentList.add(new Student(grade2, FEMALE, "122", 709, Arrays.asList(Hobby.builder().name("跳绳").score(44).build())));
studentList.add(new Student(grade1, FEMALE, "123", 370, Arrays.asList(Hobby.builder().name("跳绳").score(22).build(), Hobby.builder().name("跑步").score(100).build())));
return studentList;
}
/**
* @param args
*/
public static void main(String[] args) {
// 初始化3个年级
String grade1 = "一年级";
String grade2 = "二年级";
String grade3 = "三年级";
// 初始化数据 24个学生
List<Student> list = initStudents(grade1, grade2, grade3);
// =========================== topic-1: 转换成值 ===========================
// topic-1.1: 男:人数
long maleCount = list.stream().filter(s -> MALE.equals(s.getGender())).count();
System.out.printf("男:人数: %d\n", maleCount);
// topic-1.2: 男:平均分 averagingDouble/averagingInt/averagingLong
Double averageScore = list.stream().filter(s -> MALE.equals(s.getGender())).collect(averagingDouble(Student::getTotalScore));
System.out.printf("男:平均分: %f\n", averageScore);
// topic-1.3: 男:最高分 maxBy/minBy/ comparingDouble/comparingInt/comparingLong/comparing
double maxTotalScore = list.stream().filter(s->MALE.equals(s.getGender())).collect(maxBy(Comparator.comparingDouble(Student::getTotalScore))).orElseGet(() -> new Student()).getTotalScore();
double maxTotalScore2 = list.stream().filter(s->MALE.equals(s.getGender())).collect(maxBy(Comparator.comparing(Student::getTotalScore))).orElseGet(() -> new Student()).getTotalScore();
System.out.printf("男:最高分: %f, %f\n", maxTotalScore, maxTotalScore2);
// topic-1.4: 男:最低分
double minTotalScore = list.stream().filter(s -> MALE.equals(s.getGender())).collect(minBy(Comparator.comparingDouble(Student::getTotalScore))).orElseGet(() -> new Student()).getTotalScore();
System.out.printf("男:最低分: %f\n", minTotalScore);
// topic-1.5: 男:总分 summingDouble/summingInt/summingLong
double maleScoreSum2 = list.stream().filter(s -> MALE.equals(s.getGender())).collect(summingDouble(Student::getTotalScore)).doubleValue();
System.out.printf("男:总分: %f\n", maleScoreSum2);
// 统一获得左右汇总信息: summarizingDouble/summarizingInt/summarizingLong
DoubleSummaryStatistics statistics = list.stream().filter(s -> MALE.equals(s.getGender())).collect(summarizingDouble(Student::getTotalScore));
// {"average":458.5,"count":12,"max":662.0,"min":272.0,"sum":5502.0}
System.out.println(JSON.toJSONString(statistics));
// ===========================topic-2: 转换成其他集合 ===========================
System.out.println("==========================topic-2: 转换成其他集合 ===========================");
List<List<Hobby>> lists = list.stream().map(s -> s.getHobbies()).collect(toList());
Set<List<Hobby>> set = list.stream().map(s -> s.getHobbies()).collect(toSet());
System.out.println(JSON.toJSONString(lists));
System.out.println(JSON.toJSONString(set));
// ===========================topic-3: 数据分块:分解成两个集合:partitioningBy ===========================
System.out.println("==========================topic-3: 数据分块:分解成两个集合:partitioningBy ===========================");
Map<Boolean, List<Student>> booleanListMap = list.stream().collect(partitioningBy(s -> MALE.equals(s.getGender())));
System.out.println(JSON.toJSONString(booleanListMap));
// ===========================topic-4: 数据分组:groupingBy ===========================
System.out.println("==========================topic-4: 数据分组:groupingBy ===========================");
// 按照性别分组
Map<String, List<Student>> genderListMap = list.stream().collect(groupingBy(Student::getGender));
System.out.println(JSON.toJSONString(genderListMap));
// 按照年级分组
Map<String, List<Student>> gradeListMap = list.stream().collect(groupingBy(Student::getGrade));
System.out.println(JSON.toJSONString(gradeListMap));
// =========================== topic-5: 字符串连接:joining ===========================
System.out.println("========================== topic-5: 字符串连接:joining ===========================");
// 字符串连接:joining: 分隔符
String allStudent1 = list.stream().map(Student::getId).collect(joining(","));
System.out.println(allStudent1);
// 字符串连接:joining: 分隔符+前缀+后缀
String allStudent2 = list.stream().map(Student::getId).collect(joining(",", "[", "]"));
System.out.println(allStudent2);
// =========================== topic-6: 组合收集器:groupingBy+counting/summingInt/summingLong/summingDouble ========
System.out.println("=============== topic-6: 组合收集器:groupingBy+counting/summingInt/summingLong/summingDouble =");
// 计算每个年级的男生人数:先按照年级分组, 再统计每个年级的男生人数
Map<String, Long> maleGroupGradeMap = list.stream().filter(s -> MALE.equals(s.getGender())).collect(groupingBy(s -> s.getGrade(), counting()));
System.out.println(JSON.toJSONString(maleGroupGradeMap));
Map<String, Double> maleGroupSumScoreMap = list.stream().filter(s -> MALE.equals(s.getGender())).collect(groupingBy(s -> s.getGrade(), summingDouble(Student::getTotalScore)));
System.out.println(JSON.toJSONString(maleGroupSumScoreMap));
Map<String, Double> maleGroupAvgScoreMap = list.stream().filter(s -> MALE.equals(s.getGender())).collect(groupingBy(s -> s.getGrade(), averagingDouble(Student::getTotalScore)));
System.out.println(JSON.toJSONString(maleGroupAvgScoreMap));
// ============= 综合应用1: 获取所有男生中兴趣 “跑步” 分数最高的学生, 返回他的兴趣爱好的平均分 ============
System.out.println("=============== 综合应用1: 获取所有男生中兴趣 “跑步” 分数最高的学生, 返回他的兴趣爱好平均分 ============");
Double runHighestMaleAveragingHobbyScore = list.stream()
// 过滤出所有男士
.filter(s -> MALE.equals(s.getGender()))
// 筛选出有"跑步"爱好的学生
.filter(s -> s.getHobbies().stream().anyMatch(h -> "跑步".equals(h.getName())))
// 找到跑步分数最高的学生
.max(Comparator.comparingDouble(s -> s.getHobbies().stream().filter(h -> "跑步".equals(h.getName())).findFirst().map(Hobby::getScore).orElse(0.0)))
// 计算学生的兴趣的平均分
.map(s -> s.getHobbies().stream().collect(averagingDouble(Hobby::getScore))).orElse(0.0);
System.out.println("男生中跑步分数最高的学生,其兴趣爱好平均分: " + runHighestMaleAveragingHobbyScore);
// ============= 综合应用2: 获取所有男生中兴趣 “跑步” 分数最高的学生, 返回他的兴趣的个数 ============
}
}
输出:
男:人数: 12
男:平均分: 458.500000
男:最高分: 662.000000, 662.000000
男:最低分: 272.000000
男:总分: 5502.000000
{"average":458.5,"count":12,"max":662.0,"min":272.0,"sum":5502.0}
==========================topic-2: 转换成其他集合 ===========================
[[{"name":"跳绳","score":100.0}],[{"name":"跳绳","score":30.0},{"name":"跑步","score":80.0}],[{"name":"跳绳","score":64.0},{"name":"跑步","score":34.0}],[{"name":"跳绳","score":43.0}],[{"name":"跳绳","score":77.0}],[{"name":"跳绳","score":78.0}],[{"name":"跳绳","score":57.0}],[{"name":"跳绳","score":76.0},{"name":"飞盘","score":77.0},{"name":"跑步","score":84.0}],[{"name":"跳绳","score":78.0}],[{"name":"跳绳","score":88.0}],[{"name":"跳绳","score":99.0}],[{"name":"跳绳","score":67.0}],[{"name":"跳绳","score":34.0},{"name":"跑步","score":99.0}],[{"name":"跳绳","score":56.0}],[{"name":"跳绳","score":87.0}],[{"name":"跳绳","score":98.0},{"name":"跑步","score":32.0}],[{"name":"跳绳","score":89.0}],[{"name":"跳绳","score":68.0}],[{"name":"跳绳","score":86.0}],[{"name":"跳绳","score":67.0},{"name":"跑步","score":24.0}],[{"name":"跳绳","score":100.0}],[{"name":"跳绳","score":65.0},{"name":"跑步","score":68.0}],[{"name":"跳绳","score":44.0}],[{"name":"跳绳","score":22.0},{"name":"跑步","score":100.0}]]
[[{"name":"跳绳","score":76.0},{"name":"飞盘","score":77.0},{"name":"跑步","score":84.0}],[{"name":"跳绳","score":68.0}],[{"name":"跳绳","score":34.0},{"name":"跑步","score":99.0}],[{"name":"跳绳","score":78.0}],[{"name":"跳绳","score":89.0}],[{"name":"跳绳","score":57.0}],[{"name":"跳绳","score":44.0}],[{"name":"跳绳","score":100.0}],[{"name":"跳绳","score":87.0}],[{"name":"跳绳","score":56.0}],[{"name":"跳绳","score":43.0}],[{"name":"跳绳","score":65.0},{"name":"跑步","score":68.0}],[{"name":"跳绳","score":67.0}],[{"name":"跳绳","score":64.0},{"name":"跑步","score":34.0}],[{"name":"跳绳","score":98.0},{"name":"跑步","score":32.0}],[{"name":"跳绳","score":77.0}],[{"name":"跳绳","score":88.0}],[{"name":"跳绳","score":30.0},{"name":"跑步","score":80.0}],[{"name":"跳绳","score":99.0}],[{"name":"跳绳","score":22.0},{"name":"跑步","score":100.0}],[{"name":"跳绳","score":86.0}],[{"name":"跳绳","score":67.0},{"name":"跑步","score":24.0}]]
==========================topic-3: 数据分块:分解成两个集合:partitioningBy ===========================
{false:[{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":100.0}],"id":"100","totalScore":460.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":43.0}],"id":"103","totalScore":662.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":76.0},{"name":"飞盘","score":77.0},{"name":"跑步","score":84.0}],"id":"107","totalScore":462.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":99.0}],"id":"110","totalScore":459.0},{"gender":"女","grade":"三年级","hobbies":[{"name":"跳绳","score":56.0}],"id":"113","totalScore":670.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":98.0},{"name":"跑步","score":32.0}],"id":"115","totalScore":556.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":89.0}],"id":"116","totalScore":466.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":86.0}],"id":"118","totalScore":492.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":67.0},{"name":"跑步","score":24.0}],"id":"119","totalScore":260.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":100.0}],"id":"120","totalScore":455.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":44.0}],"id":"122","totalScore":709.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":22.0},{"name":"跑步","score":100.0}],"id":"123","totalScore":370.0}],true:[{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":30.0},{"name":"跑步","score":80.0}],"id":"101","totalScore":479.0},{"gender":"男","grade":"三年级","hobbies":[{"name":"跳绳","score":64.0},{"name":"跑步","score":34.0}],"id":"102","totalScore":472.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":77.0}],"id":"104","totalScore":483.0},{"gender":"男","grade":"三年级","hobbies":[{"name":"跳绳","score":78.0}],"id":"105","totalScore":662.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":57.0}],"id":"106","totalScore":575.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":78.0}],"id":"108","totalScore":272.0},{"gender":"男","grade":"三年级","hobbies":[{"name":"跳绳","score":88.0}],"id":"109","totalScore":376.0},{"gender":"男","grade":"一年级","hobbies":[{"name":"跳绳","score":67.0}],"id":"111","totalScore":472.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":34.0},{"name":"跑步","score":99.0}],"id":"112","totalScore":477.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":87.0}],"id":"114","totalScore":472.0},{"gender":"男","grade":"三年级","hobbies":[{"name":"跳绳","score":68.0}],"id":"117","totalScore":490.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":65.0},{"name":"跑步","score":68.0}],"id":"121","totalScore":272.0}]}
==========================topic-4: 数据分组:groupingBy ===========================
{"女":[{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":100.0}],"id":"100","totalScore":460.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":43.0}],"id":"103","totalScore":662.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":76.0},{"name":"飞盘","score":77.0},{"name":"跑步","score":84.0}],"id":"107","totalScore":462.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":99.0}],"id":"110","totalScore":459.0},{"gender":"女","grade":"三年级","hobbies":[{"name":"跳绳","score":56.0}],"id":"113","totalScore":670.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":98.0},{"name":"跑步","score":32.0}],"id":"115","totalScore":556.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":89.0}],"id":"116","totalScore":466.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":86.0}],"id":"118","totalScore":492.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":67.0},{"name":"跑步","score":24.0}],"id":"119","totalScore":260.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":100.0}],"id":"120","totalScore":455.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":44.0}],"id":"122","totalScore":709.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":22.0},{"name":"跑步","score":100.0}],"id":"123","totalScore":370.0}],"男":[{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":30.0},{"name":"跑步","score":80.0}],"id":"101","totalScore":479.0},{"gender":"男","grade":"三年级","hobbies":[{"name":"跳绳","score":64.0},{"name":"跑步","score":34.0}],"id":"102","totalScore":472.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":77.0}],"id":"104","totalScore":483.0},{"gender":"男","grade":"三年级","hobbies":[{"name":"跳绳","score":78.0}],"id":"105","totalScore":662.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":57.0}],"id":"106","totalScore":575.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":78.0}],"id":"108","totalScore":272.0},{"gender":"男","grade":"三年级","hobbies":[{"name":"跳绳","score":88.0}],"id":"109","totalScore":376.0},{"gender":"男","grade":"一年级","hobbies":[{"name":"跳绳","score":67.0}],"id":"111","totalScore":472.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":34.0},{"name":"跑步","score":99.0}],"id":"112","totalScore":477.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":87.0}],"id":"114","totalScore":472.0},{"gender":"男","grade":"三年级","hobbies":[{"name":"跳绳","score":68.0}],"id":"117","totalScore":490.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":65.0},{"name":"跑步","score":68.0}],"id":"121","totalScore":272.0}]}
{"一年级":[{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":100.0}],"id":"100","totalScore":460.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":43.0}],"id":"103","totalScore":662.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":76.0},{"name":"飞盘","score":77.0},{"name":"跑步","score":84.0}],"id":"107","totalScore":462.0},{"gender":"男","grade":"一年级","hobbies":[{"name":"跳绳","score":67.0}],"id":"111","totalScore":472.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":98.0},{"name":"跑步","score":32.0}],"id":"115","totalScore":556.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":67.0},{"name":"跑步","score":24.0}],"id":"119","totalScore":260.0},{"gender":"女","grade":"一年级","hobbies":[{"name":"跳绳","score":22.0},{"name":"跑步","score":100.0}],"id":"123","totalScore":370.0}],"三年级":[{"gender":"男","grade":"三年级","hobbies":[{"name":"跳绳","score":64.0},{"name":"跑步","score":34.0}],"id":"102","totalScore":472.0},{"gender":"男","grade":"三年级","hobbies":[{"name":"跳绳","score":78.0}],"id":"105","totalScore":662.0},{"gender":"男","grade":"三年级","hobbies":[{"name":"跳绳","score":88.0}],"id":"109","totalScore":376.0},{"gender":"女","grade":"三年级","hobbies":[{"name":"跳绳","score":56.0}],"id":"113","totalScore":670.0},{"gender":"男","grade":"三年级","hobbies":[{"name":"跳绳","score":68.0}],"id":"117","totalScore":490.0}],"二年级":[{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":30.0},{"name":"跑步","score":80.0}],"id":"101","totalScore":479.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":77.0}],"id":"104","totalScore":483.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":57.0}],"id":"106","totalScore":575.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":78.0}],"id":"108","totalScore":272.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":99.0}],"id":"110","totalScore":459.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":34.0},{"name":"跑步","score":99.0}],"id":"112","totalScore":477.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":87.0}],"id":"114","totalScore":472.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":89.0}],"id":"116","totalScore":466.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":86.0}],"id":"118","totalScore":492.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":100.0}],"id":"120","totalScore":455.0},{"gender":"男","grade":"二年级","hobbies":[{"name":"跳绳","score":65.0},{"name":"跑步","score":68.0}],"id":"121","totalScore":272.0},{"gender":"女","grade":"二年级","hobbies":[{"name":"跳绳","score":44.0}],"id":"122","totalScore":709.0}]}
========================== topic-5: 字符串连接:joining ===========================
100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123
[100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123]
=============== topic-6: 组合收集器:groupingBy+counting/summingInt/summingLong/summingDouble =
{"一年级":1,"三年级":4,"二年级":7}
{"一年级":472.0,"三年级":2000.0,"二年级":3030.0}
{"一年级":472.0,"三年级":500.0,"二年级":432.85714285714283}
=============== 综合应用1: 获取所有男生中兴趣 “跑步” 分数最高的学生, 返回他的兴趣爱好平均分 ============
男生中跑步分数最高的学生,其兴趣爱好平均分: 66.5
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。