为了账号安全,请及时绑定邮箱和手机立即绑定

如何将流收集到 TreeMap 中

如何将流收集到 TreeMap 中

湖上湖 2021-08-25 15:29:56
我知道这是一个菜鸟问题,但我在其他任何地方都找不到简单的答案。问题是:我需要编写一个返回 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;    }}我知道这应该很容易,我只是很难理解这一切。
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

不要HashMap先将数据收集到 a ,然后转换为TreeMap. TreeMap使用重载toMap(keyMapper, valueMapper, mergeFunction, mapSupplier)方法将数据直接收集到 a ,该方法允许您指定Map要创建的对象(第 4 个参数)。


public SortedMap<String, Long> skill_nApplicants() {

    return skillMap.values().stream().collect(Collectors.toMap(

            Skill::getName,

            Skill::getNumApplicants,

            Math::addExact, // only called if duplicate names can occur

            TreeMap::new

    ));

}


查看完整回答
反对 回复 2021-08-25
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

这是你可以做到的


public SortedMap<String, Long> skill_nApplicants(Map<String, Skill> skillMap) {

    Map<String, Long> result = skillMap.values().stream().collect(Collectors.toMap(Skill::getName, Skill::getNumApplicants));

    return new TreeMap<>(result);

}


查看完整回答
反对 回复 2021-08-25
?
萧十郎

TA贡献1815条经验 获得超13个赞

如果您没有任何值将映射到与另一个值相同的键,那么您可以完全避免使用收集器(因此您无需考虑合并功能)。


您需要做的就是使用以下命令将每个技能添加到地图中forEach:


public SortedMap<String, Long> skill_nApplicants() {

    Map<String, Long> result = new TreeMap<>();

    

    skillMap.values()

        .forEach((skill) -> result.put(skill.getName(), skill.getNumApplicants());

        

    return result;

}

你可以用result用Collections.unmodifiableSortedMap,如果你想返回一个不可修改的映射。


查看完整回答
反对 回复 2021-08-25
  • 3 回答
  • 0 关注
  • 242 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信