目录
java.util.stream.Stream#flatMap
java.util.stream.Stream
Collectors.toMap,Collectors.groupingBy
- public class TestData {
- private int id;
- private String name;
- private String sex;
- private String subject;
- private String score;
- }
-
- public class TestDataKey {
- private String name;
- private String sex;
- }
1、获取每个人所学的科目列表:List
- Map
> idAndSujectListMap= list.stream().collect(Collectors.groupingBy(TestData::getId, - Collectors.mapping(TestData::getSubject, Collectors.toList())));
-
- //去重
- Map
> idAndSujectListMap= list.stream().collect(Collectors.groupingBy(TestData::getId, - Collectors.mapping(TestData::getSubject, Collectors.toSet())));
2、获取每个人的总成绩:List
- Map
idAndScoreSumMap= list.stream().collect(Collectors.groupingBy(TestData::getId, - Collectors.summingInt(TestData::getScore));
3、获取name+sex(唯一键)对应的所有信息:List
- Map
> keyAndListMap = list.stream().collect(Collectors.groupingBy(item -> - TestDataKey.builder().name(item.getName()).sex(item.getSex()).build()));
4、获取name+sex(唯一键)对应总成绩:List
- Map
keyAndScoreSumMap = list.stream().collect(Collectors.groupingBy(item -> - TestDataKey.builder().name(item.getName()).sex(item.getSex()).build(),
- Collectors.summingInt(TestData::getScore)));
5、获取name+sex(唯一键)对应的ID:List
- Map
keyAndIdMap = list.stream().collect(Collectors.toMap(item -> - TestDataKey.builder().name(item.getName()).sex(item.getSex()).build(),
- TestData::getId, (v1, v2) -> v1));
Map
将map的value(逗号隔开的字符串)转为List
- Map
> resultMap = map.entrySet() - .stream().collect(Collectors.toMap(Map.Entry::getKey,
- entry -> Arrays.asList(entry.getValue().split(","))));
使用场景:map不适用时,有多个元素时,考虑使用
1、获取所有学科:Map
- //已有:Map
> idAndSubjectMap - //之前
- List
subjects = Lists.newArrayList(); - idAndSubjectMap.values().forEach(subjects::addAll);
-
- //替换
- List
subjects = idAndSubjectMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList())
2、获取所有学科:Map
假设map的value学科是以逗号隔开的字符串
- //已有:Map
idAndSubjectMap - //之前
- List
subjects = Lists.newArrayList(); - idAndSubjectMap.values().forEach(item -> subjects.addAll(Arrays.asList(item.split(","))));
-
- //替换
- List
subjects = idAndSubjectMap.values().stream() - .flatMap(value-> Arrays.stream(value.split(","))).collect(Collectors.toList());