gpt4 book ai didi

java - 用 lambdaj 映射两个 ArrayList?

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:14 26 4
gpt4 key购买 nike

我有两个类

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来自 Cards...我想我可以使用 lambdaj 但我不知道如何..

最佳答案

不幸的是我不知道 lambdaj,所以我无法提供使用 lambdaj 的解决方案。但我认为用纯 Java 分两步就可以相当优雅、有效地解决这个问题。

  • 第一步将 User._Id 映射到 User
  • 第二步使用第一个Map将Card._Serial映射到User

我没有测试代码,但我对它的工作原理非常乐观;-)

由于我不喜欢数组,因此我使用用户和卡列表作为输入。

希望这有帮助!

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));

}

}

关于java - 用 lambdaj 映射两个 ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38246016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com