【发布时间】:2019-06-05 20:44:13
【问题描述】:
我有一个相当简单的练习,但我受到我的知识和使用设计模式(+单元测试)的要求的限制。项目的目标是创建一个控制台应用程序,该应用程序允许您从集合中保存(添加)、打印(显示全部)、删除(按 cryteria 删除)和过滤(按条件显示)消息。
private String title;
private String author;
private String content;
private String creationDate;
我能够创建“添加”功能和“显示全部”。我的问题是过滤。我必须创建一个选项来根据用户给出的标准过滤保存的对象(所有可能的组合,如:按标题和创建日期过滤,按标题过滤等)。我想过让用户可以通过使用 switch 和这样的方法从菜单中选择它:
private final List<Message> storage = new ArrayList<Message>();
public List<Message> getAll() {
final ArrayList<Message> messages = new ArrayList<>();
messages.addAll(storage);
return messages;
}
List<Message> find(String author) {
return simpleStorage.getAll().stream()
.filter(item -> item.getAuthor() == author)
.collect(toList());
}
但我认为复制大量类似代码并不是一个好习惯。另外,我将来可能会发现这样的解决方案会令人厌烦甚至是不可能的(每个新参数都会添加新的组合)。有更好的方法吗?就像“一个一个”地选择一个标准,以便用户可以自己创建组合?我有一个提示,谓词可以帮助我解决这个问题,但我不知道该去哪里。
【问题讨论】:
标签: java design-patterns collections filtering predicate