如何将流收集到 TreeMap 中

我知道这是一个菜鸟问题,但我在其他任何地方都找不到简单的答案。问题是:我需要编写一个返回 a 的方法SortedMap,因此树图应该可以正常工作。我有一个HashMap< String, Skill>,Skill该类具有方法getName和getNumApplicants我需要返回一个SortedMap<String, Long>,以技能名称为键,以申请人数为值。这是我的立场:


private Map<String,Skill> skillMap = new HashMap<>();


public SortedMap<String, Long> skill_nApplicants() {


    return skillMap.values().stream().collect(...);

}

这是技能课


public class Skill {


    private String name;

    private List <Position> reqPosition = new ArrayList<>();

    private Long numApplicants;


    public void plusOneApplicant() {

        this.numApplicants++;

    }


    public Long getNumApplicants() {

        return numApplicants;

    }

    public Skill(String name) {

        super();

        this.name = name;

        this.numApplicants = 0L;

    }

    public String getName() {

        return name;

        }


    public List<Position> getPositions() {

        return reqPosition;

        }

    public void addReqPosition(Position p) {

        this.reqPosition.add(p);

        return;

    }

}

我知道这应该很容易,我只是很难理解这一切。


湖上湖
浏览 243回答 3
3回答

米脂

不要HashMap先将数据收集到 a ,然后转换为TreeMap. TreeMap使用重载toMap(keyMapper, valueMapper, mergeFunction, mapSupplier)方法将数据直接收集到 a ,该方法允许您指定Map要创建的对象(第 4 个参数)。public SortedMap<String, Long> skill_nApplicants() {&nbsp; &nbsp; return skillMap.values().stream().collect(Collectors.toMap(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Skill::getName,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Skill::getNumApplicants,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Math::addExact, // only called if duplicate names can occur&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TreeMap::new&nbsp; &nbsp; ));}

白衣染霜花

这是你可以做到的public SortedMap<String, Long> skill_nApplicants(Map<String, Skill> skillMap) {&nbsp; &nbsp; Map<String, Long> result = skillMap.values().stream().collect(Collectors.toMap(Skill::getName, Skill::getNumApplicants));&nbsp; &nbsp; return new TreeMap<>(result);}

萧十郎

如果您没有任何值将映射到与另一个值相同的键,那么您可以完全避免使用收集器(因此您无需考虑合并功能)。您需要做的就是使用以下命令将每个技能添加到地图中forEach:public SortedMap<String, Long> skill_nApplicants() {&nbsp; &nbsp; Map<String, Long> result = new TreeMap<>();&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; skillMap.values()&nbsp; &nbsp; &nbsp; &nbsp; .forEach((skill) -> result.put(skill.getName(), skill.getNumApplicants());&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return result;}你可以用result用Collections.unmodifiableSortedMap,如果你想返回一个不可修改的映射。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java