>我有两个类
public class User {
private int _Id;
private String _FirstName;
private String _LastName;}
和
public class Card {
private int _Id;
private int _UserId;
private String _Serial;}
我有User[]
和Card[]
数组.我想创造 HashMap<String, User>
User._Id == Card._UserId
和字符串(在HashMap中)是从卡片中_Serial
的...我想我可以使用lambdaj,但我不知道怎么做。
不幸的是,我不知道lambdaj,所以我无法使用lambdaj提供解决方案。但我认为可以通过两步使用普通Java相当优雅和有效地解决问题。
- 第一步将User._Id映射到用户
- 第二步使用第一个映射将Card._Serial映射到用户
我没有测试代码,但我非常乐观地认为它可以工作;-)
由于我不喜欢数组,所以我使用用户列表和卡片作为输入。
希望这有帮助!
public class CardToUserMapper {
public Map<String, User> mapCardsToUser(
final List<User> users,
final List<Card> cards) {
Map<Integer, User> idToUser =
users.stream()
.collect(Collectors.toMap(
u -> u.getId(),
u -> u));
Map<String, User> serialToUser =
cards.stream()
.collect(Collectors.toMap(
c -> c.getSerial(),
c -> idToUser.get(c.getUserId())));
return serialToUser;
}
}
如果一个人喜欢它更浓缩,可以这样做:
public class CardToUserMapper {
public Map<String, User> mapCardsToUser(final List<User> users,
final List<Card> cards) {
return mapSerialToUser(cards, mapUserIdToUser(users));
}
private Map<String, User> mapSerialToUser(final List<Card> cards,
final Map<Integer, User> idToUser) {
return map(cards, c -> c.getSerial(), c -> idToUser.get(c.getUserId()));
}
private Map<Integer, User> mapUserIdToUser(final List<User> users) {
return map(users, u -> u.getId(), u -> u);
}
private <S, T, U> Map<T, U> map(final List<S> listOfS, final Function<S, T> funcStoT,
final Function<S, U> funcStoU) {
return listOfS.stream().collect(Collectors.toMap(funcStoT, funcStoU));
}
}