Flux Java8 de la liste à la carte

Continuez à créer, accélérez la croissance ! C'est le 4ème jour de ma participation au "Nuggets Daily New Plan · June Update Challenge", cliquez pour voir les détails de l'événement

  • Nous avons une classe UserInfo

Les opérations de flux via JAVA8 doivent être converties en une carte avec userId comme clé et name comme valeur.

public class User {
   private Integer userId;
   private String name;
   private String email;

    public User(Integer userId, String name, String email) {
        this.userId = userId;
        this.name = name;
        this.email = email;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", name='" + name + ''' +
                ", email='" + email + ''' +
                '}';
    }
}
复制代码
  • code d'implémentation
public class ListToMap {
    public static void main(String[] args) {
        List<User> users = new ArrayList<>();
        users.add(new User(1, "user1", "[email protected]"));
        users.add(new User(2, "user2", "[email protected]"));
        users.add(new User(3, "user3", "[email protected]"));
        users.add(new User(4, "user4", "[email protected]"));

        Map<Integer, String> userIdAndName = users.stream()
                .collect(Collectors.toMap(User::getUserId, User::getName));
        System.out.println(userIdAndName);
    }
}
复制代码

résultat de sortie

  • userId est la clé, l'objet utilisateur est la valeur
public class ListToMap {
    public static void main(String[] args) {
        List<User> users = new ArrayList<>();
        users.add(new User(1, "user1", "[email protected]"));
        users.add(new User(2, "user2", "[email protected]"));
        users.add(new User(3, "user3", "[email protected]"));
        users.add(new User(4, "user4", "[email protected]"));

        Map<Integer, User> userIdAndUser = users.stream()
                .collect(Collectors.toMap(User::getUserId, user-> user));
        System.out.println(userIdAndUser);
    }
}
复制代码

production

  • Gestion des clés en double

Pendant le processus de conversion, si la même clé se produit, une exception de clé en double sera levée.

Nous avons changé le userId de 3 à 2, ce qui est en conflit avec le deuxième utilisateur

Collectors.toMap prend en charge un troisième paramètre pour sélectionner des valeurs en double

public class ListToMap {
    public static void main(String[] args) {
        List<User> users = new ArrayList<>();
        users.add(new User(1, "user1", "[email protected]"));
        users.add(new User(2, "user2", "[email protected]"));
        users.add(new User(2, "user3", "[email protected]"));
        users.add(new User(4, "user4", "[email protected]"));

        Map<Integer, User> userIdAndUser = users.stream()
                .collect(Collectors.toMap(User::getUserId, user-> user, (oldValue, newValue) -> newValue));
        System.out.println(userIdAndUser);
    }
}
复制代码

Sélectionnez la nouvelle valeur pour écraser l'ancienne valeur et obtenir le résultat

Seul l'utilisateur3 apparaît et l'utilisateur2 est écrasé.

  • Mappage des ID et des listes d'utilisateurs

Les ID en double apparaissant ci-dessus sont écrasés en fonction de la valeur, si dans certains cas, elle doit être mappée à une liste.

C'est-à-dire : le cas de List -> Map<Integer, List>

Cela nécessite l'utilisation de groupingBy

public class ListToMap {
    public static void main(String[] args) {
        List<User> users = new ArrayList<>();
        users.add(new User(1, "user1", "[email protected]"));
        users.add(new User(2, "user2", "[email protected]"));
        users.add(new User(2, "user3", "[email protected]"));
        users.add(new User(4, "user4", "[email protected]"));

        Map<Integer, List<User>> userMap = users.stream()
                .collect(Collectors.groupingBy(User::getUserId));
        System.out.println(userMap);
    }
}
复制代码

Il existe plusieurs éléments de données avec l'ID 2.

  • Spécifiez le type de carte

Collectors.toMap prend en charge le quatrième paramètre pour instancier le type de carte

public class ListToMap {
    public static void main(String[] args) {
        List<User> users = new ArrayList<>();
        users.add(new User(1, "user1", "[email protected]"));
        users.add(new User(2, "user2", "[email protected]"));
        users.add(new User(3, "user3", "[email protected]"));
        users.add(new User(4, "user4", "[email protected]"));

        Map<Integer, User> userIdAndUser = users.stream()
                .collect(Collectors.toMap(User::getUserId, user-> user, (oldValue, newValue) -> newValue, ConcurrentHashMap::new));
        System.out.println(userIdAndUser);
        System.out.println(userIdAndUser.getClass());
    }
}
复制代码

production

Le type de classe userIdAndUser est ConcurrentHashMap

Je suppose que tu aimes

Origine juejin.im/post/7104574874345013284
conseillé
Classement