16

Java 8 の新機能を使用して、a のすべての値を変換する最も簡潔な方法は何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. 値を新しい結果リストに変換します。

4

2 に答える 2

52

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

リストを考えると:

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());
于 2013-10-30T07:59:02.390 に答える
0

たぶん、コレクションで新しいストリームの概念を使用します:

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());
于 2013-10-30T08:21:58.553 に答える