我有一个Hashmap:
Map<String, Paper> numberMapping = new HashMap<>();
课堂论文String[] author; String[] scores;
我想检索哈希图中包含的每个对象的所有作者。
我尝试了System.out.print(numberMapping.values().getAuthor());
,但是它不起作用,该怎么办?预先感谢。
答案 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)
打印作者。