bugfix> java > 投稿

例えば

class TypeA {
    private String a;
    private String b;
    private String c;
}
class TypeB {
    private String a;
}

今私はのリストを持っています TypeA 、そして私は情報だけが必要です a から TypeA 。 変換する最も効率的な方法は何ですか List<TypeA>List<TypeB>

回答 2 件
  • 答えは、「効率的」の意味によって異なります。

    // Option 1
    List<TypeB> bList = new ArrayList<>();
    for (TypeA a : aList) {
        bList = new TypeB(s.getA());
    }
    // Option 2
    List<TypeB> bList = aList.stream()
            .map(TypeA::getA)
            .map(TypeB::new)
            .collect(Collectors.toList());
    // Option 3
    List<TypeB> bList = aList.stream().map(a -> new TypeB(s.getA())).collect(toList());
    
    

    最初実行するベスト。それは効率の一種です。

    2番目と3番目は単一のステートメントです。これは別のタイプの効率です。

  • どのように効率的ですか?の面では保守性そして明快さ、リフレクションとアノテーションの両方に基づくModelMapperやMapStructなどのオブジェクトマッピングライブラリに投票します。 MapStructの場合、オブジェクトのマッピングを定義できます TypeA そして TypeB 同じマッピングインターフェイス内で関連するメソッドを使用します。

    @Mapper
    public interface TypeA Mapper {
        @Mapping(target="a")
        TypeB typeAToTypeB(TypeA typeA) 
        List<TypeB> listOfTypeAToListOfTypeB(List<TypeA> list);
    }
    
    

    常にjava-streamまたは単純なforループを使用した単純な反復を使用できます。

    List<TypeB> listOfTypeB = listOfTypeA.stream()
        .map(typeA -> new TypeB(typeA.getA())
        .collect(Collectors.toList());
    
    

あなたの答え