为了账号安全,请及时绑定邮箱和手机立即绑定

Java - 为过滤函数创建循环

Java - 为过滤函数创建循环

不负相思意 2022-04-28 17:05:14
我试图弄清楚如何处理过滤项目。我能够一次按一个字段过滤我的集合(感谢 guava Immutable.of),但我不得不创建一种方法来一次又一次地过滤我的集合,直到用户告诉我(例如,在开关)他已经完成并想要返回主菜单。private String filterOption() {    System.out.println("What fields should I filter by? :\n" +            "title\n" +            "author\n" +            "content\n" +            "date\n");    String filteringOption = scanner.nextLine();    return filteringOption;}private String filterValue() {    System.out.println("What value you want to use for filtering? :\n");    String userInput = scanner.nextLine();    return userInput;}public List<Message> filterMessages() {    String filteringOption = filterOption();    String userInput = filterValue();    Map<String, BiPredicate<String, Message>> criteria = ImmutableMap.of(            "title", (userTitle, message) -> userInput.equals(message.getTitle()),            "author", (userAuthor, message) -> userInput.equals(message.getAuthor()),            "content", (userContent, message) -> userInput.equals(message.getContent()),            "date", (userDate, message) -> userInput.equals(message.getCreationDate())    );    BiPredicate<String, Message> predicate = criteria.get(filteringOption);    filteredMessages = messageStorage.getAll().stream() //getAll() is to get entire collection            .filter(m -> predicate.test(userInput, m))            .collect(Collectors.toList());    return filteredMessages;}有人可以告诉我一种方法,允许用户使用他们从 filterMessages() 获得的值再次使用相同的方法过滤它们吗?简而言之 - 过滤曾经过滤过的内容,直到您满意或返回列表中没有任何内容。
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

可能是这样的:


List<Message> messageStorage = new ArrayList<>(); // messageStorage.getAll()

String userChoice = "";

while (!userChoice.equalsIgnoreCase("No")) {

    messageStorage = filterMessages(messageStorage); // modifying the existing list

    System.out.println("Want to continue filtering? Yes/No");

    userChoice = scanner.next();

}

我刚刚将您的filterMessages方法调整为:


List<Message> filterMessages(List<Message> messageStorage) {

    String filteringOption = filterOption();

    String userInput = filterValue();

    Map<String, BiPredicate<String, Message>> criteria = ImmutableMap.of(

            "title", (userTitle, message) -> userInput.equals(message.getTitle()),

            "author", (userAuthor, message) -> userInput.equals(message.getAuthor()),

            "content", (userContent, message) -> userInput.equals(message.getContent()),

            "date", (userDate, message) -> userInput.equals(message.getCreationDate())

    );


    return messageStorage.stream()

            .filter(m -> criteria.get(filteringOption).test(userInput, m))

            .collect(Collectors.toList());

}


查看完整回答
反对 回复 2022-04-28
  • 1 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信