0
votes

Java Trier Liste des chaînes par valeur de chaîne entrée par un utilisateur

Je cherche un moyen de trier une liste de chaînes basées sur la saisie de l'utilisateur à Java. Par exemple, ma liste contient ["Pat Henderson", "Zach Harrington", "Pat Douglas", "Karen Walsh"] , si un utilisateur entre dans le prénom "PAT" Comment puis-je pouvoir imprimer uniquement les PATS de la liste et même pour les noms de famille?


2 commentaires

Qu'est-ce que tu as essayé jusque-là? S'il vous plaît poster votre code.


Itérer à travers la liste et quand son match l'impression.


3 Réponses :


1
votes

.Filter () code> introduit dans Java 8 serait à la chose.

List<String> names = new ArrayList<>();
names.addAll(Arrays.asList("Pat Henderson", "Zach Harrington", "Pat Douglas", "Karen Walsh"));

String startsWith = "Pat";

List<String> filteredNames = names.stream()
        .filter(name -> name.startsWith(startsWith))
        .collect(Collectors.toList());


2 commentaires

Merci pour votre réponse. Je suis demandé comme une condition requise de trier par prénom ou par nom de famille, donc j'ai supposé que l'exigence demandait était de montrer uniquement les noms correspondant à la chaîne saisie par l'utilisateur.


La chaîne peut être un prénom ou un nom de famille.



2
votes
ArrayList<String> str = new ArrayList<String>();

for(int i = 0 ; i < str.size() ; i++) {
    if(str.get(i).contains("your_user_input")) {
        System.out.println(str.get(i));
    }
}

1 commentaires

Cette réponse fonctionne plus rapidement que la mienne, mais un peu moins lisible sur une plus grande échelle.



1
votes

supposant que chaque élément de la liste ait un nom et un nom de famille séparé par un espace blanche ou plus, avec Java 8, vous pouvez filtrer sur le nom ou le nom de famille de cette manière:

List<String> list = Arrays.asList("Pat Henderson", "Zach Harrington", "Pat Douglas", "Karen Walsh");
String nameOrLastNameToFilter = ...;
list.stream().filter(s -> Arrays.stream(s.split("\\s+"))
                                .anyMatch(n->n.equals(nameOrLastNameToFilter))
                    )
    .collect(toList());


0 commentaires