我需要创建一个名为 getRentals
的方法,该方法给定一个书籍 ID,返回一个 SortedMap<String, String>
。映射中的键是读者 ID,值是一个字符串,格式为 "DD-MM-YYYY DD-MM-YYYY",这两个日期分别表示书籍租赁的开始和结束日期。
我已经编写了如下代码,但遇到了一些问题,可能是我对 groupingBy
方法的理解不够准确。
public SortedMap<String, String> getRentals(String bookID) throws LibException {
Book b = this.idsColl.get(bookID);
SortedMap<String, String> res = b.getRentalsList().stream()
.collect(Collectors.groupingBy(Rental::getReaderId,
r -> {
String start = r.getStartDate();
String end = r.getEndDate();
return start + " " + end;
}));
return null;
}
这里的 idsColl
是一个将唯一书籍 ID 与书籍对象关联起来的映射。
Rental 类的属性如下:
private String readerId;
private String bookId;
private String startDate;
private String endDate;
Book 类的属性如下:
private String copy_id;
private String title;
private boolean rented = false;
private LinkedList<Rental> rentals = new LinkedList<>();
能否请你帮我理解一下我做错了什么?
我期望得到一个映射,其中包含所有租过这本书的读者及其对应的租赁起止日期字符串。但是 Eclipse 给出错误提示:“Collectors 类型中 groupingBy 方法(Function<? super T, ? extends K>,Collector<? super T, A, D>>)对于参数 Rental::getReaderId 和 ((<no type> r) -> {}) 不适用”。
Eclipse 显示的问题可能指向了lambda表达式部分。