将构造函数与 Lambda 表达式结合使用(设置比较器)

Jav*_*Man 4 java lambda expression comparator treeset

我的任务是使用构造函数 TreeSet( Comparator<E> comparator) 和 lambda 表达式来使集合按书名排序。

给出以下信息:

public class Book implements Comparable<Book> {
    private String isbn;
    private String title;
    private String author;

    public int compareTo(Book obj) {
      return isbn.compareTo(obj.isbn);
    }
    // all-args constructor and getters
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我的想法是:我认为构造函数允许您定义比较器。也许我应该这样做:

Comparator<String> comp = 
    (String title, String obj.title) -> (title.compareTo(obj.title));
Run Code Online (Sandbox Code Playgroud)

然后将此 comp 放入TreeSet<Book> bookSet = new TreeSet<Book>(comp);

然而,这似乎不起作用。我认为我需要做的是在创建新的 TreeSet 时在同一行中使用 lambda 表达式,但是,我不确定如何执行此操作。

Mur*_*nik 5

你需要一个Comparator<Book>,而不是一个Comparator<String>。获得它的最简单方法是使用Comparator.comparing

TreeSet<Book> bookSet = new TreeSet<>(Comparator.comparing(Book::getTitle));
Run Code Online (Sandbox Code Playgroud)