目录
list => map
map => map 数据处理
java.util.stream.Stream#flatMap
java.util.stream.Stream
list => map
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
MapidAndScoreSumMap= 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
MapkeyAndScoreSumMap = list.stream().collect(Collectors.groupingBy(item -> TestDataKey.builder().name(item.getName()).sex(item.getSex()).build(), Collectors.summingInt(TestData::getScore)));
5、获取name+sex(唯一键)对应的ID:List
MapkeyAndIdMap = list.stream().collect(Collectors.toMap(item -> TestDataKey.builder().name(item.getName()).sex(item.getSex()).build(), TestData::getId, (v1, v2) -> v1));
map => map 数据处理
Map
将map的value(逗号隔开的字符串)转为List
Map> resultMap = map.entrySet() .stream().collect(Collectors.toMap(Map.Entry::getKey, entry -> Arrays.asList(entry.getValue().split(","))));
java.util.stream.Stream#flatMap
使用场景: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学科是以逗号隔开的字符串
//已有:MapidAndSubjectMap //之前 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());



