我有一个对象Map
Map<Integer, User>
,其中用户ID映射到具有ID,名字,姓氏,名称,电子邮件,邮政编码,国家/地区,状态的用户对象
如何将其简化为仅包含ID和名称的地图,而其他用户信息无关。
-编辑
抱歉,我不清楚我的问题,我基本上想离开
0 : {id: 0, name: 'test0', country: 'us', firstName: 'ft0', lastName: 'lt0'},
1 : {id: 1, name: 'test1', country: 'us', firstName: 'ft1', lastName: 'lt1'},
2 : {id: 2, name: 'test2', country: 'us', firstName: 'ft2', lastName: 'lt2'}
到
0 : {id: 0, name: 'test0', country: 'us'},
1 : {id: 1, name: 'test1', country: 'us'},
2 : {id: 2, name: 'test2', country: 'us'}
我还有一个具有所有用户属性的User类和一个仅具有ID,名称和国家/地区的UserV2类
答案 0 :(得分:2)
使用Stream
来避免临时状态。
final Map<String, String> output =
input.entrySet()
.stream()
.collect(Collectors.toMap(
o -> o.getKey(),
o -> o.getValue().getName()
));
Collectors.toMap
接受两个功能接口作为输入参数
toMap(Function<? super T, ? extends K> keyMapper, // Returns the new key, from the input Entry
Function<? super T, ? extends U> valueMapper // Returns the new value, from the input Entry
) { ... }
要处理该用例,您需要创建一个新的,简化的用户表示形式。
public class SimpleUser {
public final String id;
public final String name;
public final String country;
private SimpleUser(
final String id,
final String name,
final String country) {
this.id = id;
this.name = name;
this.country = countr;
}
public static SimpleUser of(
final String id,
final String name,
final String country) {
return new SimpleUser(id, name, country);
}
}
比你刚好
.collect(Collectors.toMap(
o -> o.getKey(),
o -> {
final User value = o.getValue();
return SimpleUser.of(user.getId(), user.getName(), user.getCountry());
}
));
答案 1 :(得分:0)
此答案使用Java Streams。 collect
方法可以接受Collector
。 This one接受每个(Integer, User)
对,并创建一个(Integer, UserV2)
对。
Map<Integer, UserV2> userIdToUserV2 = users.entrySet().stream()
// Map (Integer, User) -> (Integer, UserV2)
.collect(Collectors.toMap(
// Use the same Integer as the map key
Map.Entry::getKey,
// Build the new UserV2 map value
v -> {
User u = v.getValue();
// Create a UserV2 from the User values
return new UserV2(u.getId(), u.getName(), u.getCountry());
}));