1
votes

Changement du paramètre de filtre de tri dans la méthode de tri de Java 8 Comparator

Comment modifier le paramètre de tri en fonction d'une vérification nulle dans le flux Java 8.

Exemple:

myList = myList .stream (). sorted (Comparator.comparing (Profile: : getFirstName)). collect (Collectors.toList ());

Ici, si getFirstName s'avère NULL, je veux utiliser une autre valeur getLastName.

Comme:

if(Profile.getFirstName()==null)

Sort using Profile.getLastName()

else

Sort using Profile.getFirstName()


2 commentaires

Vous n'utilisez pas de référence de méthode, mais plutôt un lambda?


À moins qu'il ne soit nécessaire de remplacer la liste par une nouvelle liste, vous pouvez simplement appeler sort (comparateur) sur la liste, au fait.


3 Réponses :


3
votes
...sorted(Comparator.comparing(x -> x.getFirstName() == null ? x.getLastName() : x.getFirstName()))....

1 commentaires

cela ne se compilera pas car l'interface fonctionnelle de Comparator prend deux arguments.



1
votes

J'ai fait ceci:

 myList = myList.stream().sorted(Comparator.comparing(profile->profile.getFirstName()==null? profile.getLastName():profile.getFirstName())).collect(Collectors.toList()); 


0 commentaires

1
votes
    myList.stream().sorted((a, b) -> {
        if(a.getFirstName() != null && b.getFirstName() != null) {
            return a.getFirstName().compareTo(b.getFirstName());
        }

        if (a.getLastName() != null && b.getLastName() != null) {
            return a.getLastName().compareTo(b.getLastName());
        }

        return 0;
    });

0 commentaires