【发布时间】:2021-12-05 01:45:57
【问题描述】:
我是一名 Java II 编程专业的学生。我有一个具有两个属性的对象 Publication... 书籍列表和作者列表
public class Publication {
public final List<Book> bookList;
public final List<Author> authorList;
}
public class Author {
private final String id;
private final String firstName;
private final String lastName;
private final int age;
}
public class Book {
private final String title;
private final String authorId; //this is equal to person's id who wrote the book
}
我的任务是创建一个方法
public List<Book> getBooksByAuthorAge(int age){}
在接受 int 年龄的 Publication 类中,然后返回由该年龄作者撰写的所有书籍。 Book 属性“authorId”与 Author 属性“id”相关。所以我需要计算年龄,找到那个年龄的人,找到他们的 id,然后按那个年龄的作者列表中的 authorId 过滤书籍列表。
与 Java 和尝试使用流相比,我仍然有点弱,但在每一步我都受挫。我已经开始将它分解成多个语句,首先返回一个具有给定年龄的人员列表,然后使用它来映射一个 ID 列表,然后我可以用它来与 authorIds 进行比较,但我在流中挣扎并且我不想回到 Java I 的旧 for 循环!我知道在这个小方法中绑定一堆变量太愚蠢了。你们那些制作美丽溪流的人可以给我一点推动吗?非常感谢提前,真的!
以下内容只是完成了一半,太愚蠢了,但只是为了展示我的思想陷入泥潭:
//a List of authors who are of that age
List<Author> agedResults = authorList.stream()
.filter(p -> p.getAge() == age)
.collect(Collectors.toList());
//a list of IDs that belong to authors of that age
List<String> agedIds = agedResults.stream()
.map(Author::getId)
.collect(Collectors.toList());
【问题讨论】:
标签: java list collections java-stream