簡體   English   中英

使用lambdaj映射兩個ArrayList?

[英]Map two ArrayList with lambdaj?

我有兩節課

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映射到User
  • 第二步使用第一個Map將Card._Serial映射到User

我沒有測試代碼,但我很樂觀它的工作原理;-)

因為我不喜歡Arrays,所以我使用了用戶和卡片列表作為輸入。

希望這可以幫助!

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

}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM