java - Guava :从包含变量的对象列表中获取变量列表

标签 java list guava

想法:

我有一个对象

public class Book(){
  private String name;
  private Integer nbOfPage;
  public Book()
  ...
}

我得到了这个对象的列表

List<Book> books = new ArrayList<Book>();

现在我想知道在 guava 或其他图书馆中,是否有一种快速的方法可以从我得到的所有书籍中获取所有不同名称的列表,我可以做的事情:

List<String> names = new ArrayList<String>();
for (Book aBook : books){
   if (!names.contains(aBook.getName()){
        names.add(aBook.getName());
   }
}

我觉得这种方式有点“重”,我的书单可以有 200 到 1200 本书。

问候,

最佳答案

使用 Guava 的 Multimaps.index .它的功能完全符合您的预期。

List<Book> books = ...

Function<Book,String> bookToName = new Function<Book,String>() {
  String apply(Book b) { return b.getName(); }
}

Multimap<String,Book> booksByName = Multimaps.index(books, bookToName);

然后,使用您的 Multimap,例如 booksByName.keys() 如果您只需要名称。

关于java - Guava :从包含变量的对象列表中获取变量列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14871615/

相关文章:

java - 同一应用程序在两台不同的机器上显示不同的行为 jboss EAP 7.0

list - 使用箭头浏览列表/更改小部件

list - 如何在prolog中创建全局变量

java - 考虑到旧 key 的 Guava 缓存

java - 如何将Guava缓存发送到另一种方法时每30秒清空一次?

java - 消化器 : Extracting node name for a map<tagname, 值>

java - 任何未使用的对象都可以从垃圾收集器中逃脱吗?

java - 通用通配符类型不应在返回参数中使用

Python:从元组列表中提取元组

java - 处理列表流并收集到只有非空值的 map/ImmutableMap