2016-12-21 4 views
-1

私は自分自身と同じJava 8過剰発現を超える複製見つける:ファクタリングアウト重複するJava 8の発現

方法1では、私が持っている:そして、同じクラスの別の方法で

List<Message> latestMessages = new ArrayList<>(); 
... 
return latestMessages.stream().map(messageMapper::asMessageDto).collect(toList()); 

、私が持っている:両方の方法の

List<Message> messagesBetweenTwoUserAccounts = ...; 
return messagesBetweenTwoUserAccounts.stream().map(messageMapper::asMessageDto).collect(toList()); 

戻り値の型がある:List<MessageDto>

I BASICA llyはList<Message>からList<MessageDto>に変換されます。

お知らせ重複表現:

stream().map(messageMapper::asMessageDto).collect(toList());

は何のJava 8つの構造を用いて上記の式を考慮するための最良の方法だろうか?

+3

Java 8はどのように特化していますか? 'List 'を取得し、 'List 'を返す単一のメソッドを書くことができます。このメソッドの本体にJava 8の構造が含まれているという事実には違いはありません。 – Eran

+0

私は**マッピング**と**収集**のための別のJava 8の構築があると思ったが、私は間違っているかもしれない... – balteo

+2

私はおそらくそれをしないだろうが、技術的には、リスト、リスト> f = l - > l.stream()。map(messageMaper :: asMessageDto).collect(toList()); 'とreturn f.apply(lastestMessages);のように使用してください –

答えて

1

あなたはそれを含むメソッドを記述し、latestMessages.stream().map(messageMapper::asMessageDto).collect(toList());を複数回繰り返したくない場合:

public static List<MessageDto> transformMessages (List<Message> messages) { 
    return messages.stream().map(messageMapper::asMessageDto).collect(toList()); 
} 

今、あなたは、そのストリームパイプラインのコードを繰り返すことなく、複数の場所からそれを呼び出すことができます。

そのメソッドが静的であるかどうかわかりません。それはどこから呼びかけているのか、そしてmessageMapperは(Holgerがコメントしたように)どこから来るのかによって異なります。メソッドの別の呼び出しで異なるマッパーが必要な場合は、messageMapperを引数として追加できます。

+0

これは、 'messageMapper'がどこから来たかによって異なります... – Holger

+0

messageMapperはクラスのインスタンスフィールドです。 – balteo

+0

私は同じクラスで 'messageMapper'だけを使います。 – balteo

関連する問題