2017-12-26 15 views
1

最初のリストのインスタンスを使用して別のインスタンスリストを作成する必要があるインスタンスのリストがあります。 以下に示す例では、foreachループまたはforループを使用できます。これをより効率的に行うためのより良い方法はありますか?別のインスタンスリストを使用してJavaでインスタンスのリストを効率的に作成する方法

List<ArchMessage> archMessages = 
    messages.stream() 
      .map(message -> new ArchMessage(message)) 
      .collect(Collectors.toList()); 

または

List<ArchMessage> archMessages = 
    messages.stream() 
      .map(ArchMessage::new) 
      .collect(Collectors.toList()); 
+0

'Message'クラスと' ArcMessage'クラスの関係は何ですか? –

+0

問題/解決策のスペースを明確に定義していません。効率的にはどういう意味ですか?より読みやすい?よりメンテナンス可能?最高のパフォーマンス?最もスケーラブル? – scottb

+0

これを行う他の方法はありますか?はい。より効率的に?いいえ – VGR

答えて

3

我々は無料で の並列性を得ることができるので理想的でしょうparallelStream

List<ArchMessage> resultSet = messages.parallelStream() 
             .map(ArchMessage::new) 
             .collect(Collectors.toList()); 

あなたの現在のアプローチは、良好で読みやすいようです。

0

それはしかし、のは、あなたのコードはストリームAPIを使用して、その後、並列処理から利益を得ることができるとしましょうにつれてなどが効率的です:あなたは、Java 8 Stream Sを使用することができます

List<Mesage> messages; 
List<ArchMessage> archMessages = new ArrayList<>(); 
for(Message message : messages) { 
     archMessages.add(new ArchMessage(message)); 
} 
0

は、Java 8からのストリームを使用できない場合は、Apache Commonsのコレクションライブラリは、以下の機能を提供します。

http://commons.apache.org/proper/commons-collections/

Collection<ArchMessage> archMessages = CollectionUtils.collect(messages, new Transformer() { 
    public Object transform(Object o) { 
     return new ArchMessage((Mesage) o); 
    } 
}); 
0

あなたRECHERCHEへのフィードバック: 私は「ドンすることをお勧めしますforeachを使用しないでください。それはそれぞれの内部要求のあなたの効率的なダウン原因をスローされます。毎回aを使うことをお勧めします..

関連する問題