Maison  >  Questions et réponses  >  le corps du texte

lambda - java8 Un objet est disposé dans l'ordre d'un certain champ dans l'objet

Par exemple, je veux avoir une classe User
Les attributs qu'elle contient sont comme ceci private int age,private String name
Il y a plusieurs objets

User user1 = new User(21,"张三") User user2 = new User(25,"李四") User user3 = new User(22,"王五")     List<User> list = new ArrayList(); list.add(user1) add(user2) add(user3)

Maintenant, je veux le trier par ordre croissant d'âge, c'est-à-dire que le résultat final d'affichage de lisr est user1 user3 user2
Comment l'écrire en utilisant l'expression lambda de java8 ?

Il s'agit d'une classe similaire à l'utilisateur. La comparaison de la valeur de comptage à l'intérieur peut réaliser la fonction, mais pourquoi le code entre parenthèses est-il gris ?
Déplacez la souris vers le haut. Rapport Can be replaced with Comparator.comparingInt more... (Ctrl+F1)

欧阳克欧阳克2646 Il y a quelques jours988

répondre à tous(3)je répondrai

  • 三叔

    三叔2017-06-23 09:15:33

    Celui de l'étage n'est pas convivial. La méthode suivante est plus déclarative, pas l'ancien style impératif

    .
    List<User> newList = list.stream().sorted(Comparator.comparing(User::getAge))
                                      .collect(Collectors.toList());

    N'est-il pas plus facile de lire comme ça ? J'ai créé un comparateur basé sur Userage属性进行个排序,属性是int就按照int排序,其实Comparator.comparing(User::getAge) La valeur par défaut est l'ordre croissant... Si vous voulez l'ordre décroissant... inversez-le

    .
    List<User> newList = list.stream().sorted(Comparator.comparing(User::getAge).reversed())
                                      .collect(Collectors.toList());

    C'est très confortable...haha

    répondre
    0
  • ringa_lee

    ringa_lee2017-06-23 09:15:33

    Arrays.sort(list, (user1 , user2) -> Integer.compare(v1.age, v2.age));

    répondre
    0
  • typecho

    typecho2017-06-23 09:15:33

    À mon avis, vous devriez implémenter l'interface Comparable, puis appeler directement le tri

    répondre
    0
  • Annulerrépondre