web-dev-qa-db-ja.com

Java 8の機能を使用して、リストのすべての値を変換する最も簡潔な方法は何ですか?

Java 8の新機能を使用して、List<String>のすべての値を変換する最も簡潔な方法は何ですか?

これを考えると:

List<String> words = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");

私は現在これをやっています:

for (int n = 0; n < words.size(); n++) {
    words.set(n, words.get(n).toUpperCase());
}

Java 8の新しいLambdas、Collections、およびStreams APIがどのように役立つか:

  1. 値をインプレースで変換します(新しいリストを作成せずに)

  2. 値を新しい結果リストに変換します。

14
The Coordinator

これは私が思いついたものです:

リストを考えると:

List<String> keywords = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");

(1)それらを適切な場所に変形する

多分私はそれが欠けているかもしれません、リストにラムダをとる「適用」または「計算」メソッドがないようです。したがって、これは古いJavaの場合と同じです。私はJava 8。

for (int n = 0; n < keywords.size(); n++) {
    keywords.set(n, keywords.get(n).toUpperCase());
}

For(..)ループに勝るこの方法はありますが:

IntStream.range(0,keywords.size())
    .forEach( i -> keywords.set(i, keywords.get(i).toUpperCase()));

(2)変換して新しいリストを作成する

List<String> changed = keywords.stream()
    .map( it -> it.toUpperCase() ).collect(Collectors.toList());
48
The Coordinator

コレクションで新しいストリームの概念を使用している可能性があります。

List<String> keywords = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");
//(1)
keywords = keywords.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
//(2)
List<String> uppercaseKeywords = keywords.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
0
jsrmalvarez