2016-07-07 4 views
1

私はUser[]Card[]の配列を持つ2つのクラス2つのArrayListを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._Id == Card._UserIdと文字列(HashMapの中に)私はlambdajを使用することができると思うが、私は方法がわからない...カードから_Serial ..です

+0

は、zip形式のリストの上にマッピングし、2つのリストをzip形式で圧縮します。私は90%のサイトJavaを持っています。 – Carcigenicate

+0

[2つのArrayListsを同時に繰り返す方法は?](http://stackoverflow.com/questions/15985266/how-to-iterate-through-two-arraylists-同時) – Carcigenicate

答えて

0

は、残念ながら私はlambdajを知らない HashMap<String, User>を作成したいです私はlambdajを使って解決策を提供することはできません。 しかし、私は2つのステップで平易なJavaを使用して問題を合理的かつ効率的に解決できると考えています。最初のステップは、ユーザー

  • にUser._Idをマップ

    • 第2のステップは、ユーザー

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

    }

  • +0

    実際には、私はこの答えを投稿したときにアンドロイドタグ: - これはアンドロイドのために働くかどうかはわかりません...しかし、私は確かに、誰かが私にすぐに教えてくれる! – martinhh

    関連する問題