2 回答
TA贡献1155条经验 获得超0个赞
使用 aStream来避免临时状态。
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());
}
));
TA贡献1828条经验 获得超3个赞
这个答案使用Java Streams。该collect方法可以接受一个Collector. 这个取每一(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());
}));
添加回答
举报