Java - la creación de un bucle de una función de filtrado

DrAhzek:

Estoy tratando de encontrar la manera de manejar el filtrado proyecto. Soy capaz de filtrar mi colección por un campo a la vez (gracias a la guayaba Immutable.of), pero estoy obligado a crear una forma de filtrar mi colección una vez y otra vez, hasta que el usuario le dice (por ejemplo, en interruptor) que ha hecho y quiere volver al menú principal.

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;
}

Podría alguien me muestran una forma de permitirá al usuario utilizar los valores que tienen de los filterMessages () para, una vez más filtrar utilizando el mismo método? En pocas palabras - filtro de lo que una vez fue filtrada hasta que esté satisfecho o no hay nada en la lista devuelta.

también:

Posiblemente algo como:

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();
}

donde acabo hemos ajustado el filterMessagesmétodo:

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());
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=187241&siteId=1
Recomendado
Clasificación