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