如何获取HashMap中包含的所有键的特定属性值?

时间:2019-12-07 14:29:54

标签: java hashmap

我有一个Hashmap: Map<String, Paper> numberMapping = new HashMap<>();

课堂论文String[] author; String[] scores;

我想检索哈希图中包含的每个对象的所有作者。

我尝试了System.out.print(numberMapping.values().getAuthor());,但是它不起作用,该怎么办?预先感谢。

2 个答案:

答案 0 :(得分:3)

您没有看到用户友好的输出,因为您正在打印String []对象,该对象没有友好的toString()方法。

或者使用Set<String>代替String[],后者具有更好的实现,或者假设使用Java 8+,一种有效的方式可能是:

Set<String> allAuthors = numberMapping.values()
        .stream()
        .map(paper -> paper.author)
        .flatMap(author -> Arrays.stream(author))
        .collect(Collectors.toSet());
System.out.println(allAuthors);

通常,对表示集合的变量使用复数形式。

我假设输出的总体顺序对您来说并不重要,因为您使用Hashmap存储值,如注释中所指出的那样

答案 1 :(得分:1)

您可以通过以下方式进行操作:

List<String[]> authors = ...
for (Paper paper : numberMapping.values()) {
    authors.add(paper.getAuthor());
}
//print authors

或者,您可以使用如下所示的Stream api:

System.out.println(numberMapping.values().stream().
                       map(paper -> paper.getAuthor()).
                       collect(Collectors::asList));

现在请记住,您拥有作者数组,因此可能无法正确打印,因为数组未实现内置的toString,因此您可能需要遍历每个元素并使用Arrays.toString(authors)打印作者。