如何将流收集到树状图中

2022-09-03 00:52:28

我知道这是一个菜鸟的问题,但我在其他地方找不到简单的答案。问题是:我需要编写一个返回 a 的方法,因此树状图应该可以正常工作。我有一个,该类有两种方法,我需要返回一个,技能的名称作为键,申请人的数量作为值。这就是我的立场:SortedMapHashMap< String, Skill>SkillgetNamegetNumApplicantsSortedMap<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;
    }
}

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


答案 1

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

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
    ));
}

答案 2

这就是你如何做到的

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);
}

推荐