Java 8の学習

user3451476:

Java 8で記述したい既存のコードがJavaにあります。

誰かがこのコードをJava 8に移植する提案を提供できますか?

class Solution {

public List<List<String>> groupAnagrams(String[] strs) {

    List<List<String>> result = new ArrayList();
    Map<String, List<String>> map = new HashMap();

    if (strs == null || strs.length == 0) return result;

    for (String word: strs) {
        char[] wordArr = word.toCharArray();
        Arrays.sort(wordArr);
        String sortedWord = new String(wordArr);
        if (map.containsKey(sortedWord)) {
            List<String> list = map.get(sortedWord); 
            list.add(word);
            map.put(sortedWord, list);
        } else {
            List<String> list = new ArrayList();
            list.add(word);
            map.put(sortedWord, list);
        }
    }
    return new ArrayList(map.values());
 }
}

更新 -getOrDefault()を使用しました

class Solution {

    public List<List<String>> groupAnagrams(String[] strs) {

        List<List<String>> result = new ArrayList();

        Map<String, List<String>> map = new HashMap();

        if (strs == null || strs.length == 0) return result;

        for (String word: strs) {
            char[] wordArr = word.toCharArray();
            Arrays.sort(wordArr);
            String sortedWord = new String(wordArr);
            List<String> list = map.getOrDefault(sortedWord, new ArrayList());
            list.add(word);
            map.put(sortedWord, list);
        }
        return new ArrayList(map.values());
    }
}

その他の方法で ?

MTCoster:

ストリームを使用して思いつくことができる最高のソリューションは次のとおりです。

public class Solution {
    private static String sortString(String str) {
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        return new String(chars);
    }

    public List<List<String>> groupAnagrams(String[] strs) {
        if (strs == null) {
            return new ArrayList<>();
        }

        return new ArrayList<>(Arrays.stream(strs)
                .collect(Collectors.groupingBy(Solution::sortString))
                .values());
    }
}

ノート:

単純なものから始めstrsて、ユーティリティメソッドを使用して配列からストリームを作成しますArrays.stream(array)

Arrays.stream(strs);

Stream#collect(collector)この方法は、ストリームを受け取り、標準のコレクション型(に変換するMapListなど)。

Arrays.stream(strs)
        .collect(...);

この例では、を使用しますCollectors.groupingBy(classifier)このコレクターは、classifierラムダ関数に各値を渡した結果によって指定されたビンラベルを使用して、ストリームを「ビン」にソートします戻り値の型はMap<K, List<V>>Kラベルの型あり、Vストリーミングしている型です)- map変数に使用したのと同じ形状です

Arrays.stream(strs)
        .collect(Collectors.groupingBy(...));

しかし、どの関数を渡し.groupingBy()ますか?ソートされた文字列でグループ化しようとしているので、通常の文字列からソートされた文字列を作成する関数が必要です。これには既存の関数を使用します。

Arrays.stream(strs)
        .collect(Collectors.groupingBy(str -> {
                char[] chars = word.toCharArray();
                Arrays.sort(chars);
                return new String(chars);
        }));

けれどもStreamyにあることの興味では、我々はしてその機能を置き換える別の *ストリーム:それは結局のところcharsがきれいにストリーミングされません

わかりやすくするために、ラムダ関数をクラスの静的メソッドにリファクタリングしました。

private static String sortString(String str) {
    char[] chars = str.toCharArray();
    Arrays.sort(chars);
    return new String(chars);
}
Arrays.stream(strs)
        .collect(Collectors.groupingBy(str -> {
                return Solution.sortString(str);
        }));

パラメーターを1つだけ取る関数を1回呼び出しているので、ラムダ関数の代わりにメソッド参照を使用できます。

Arrays.stream(strs)
        .collect(Collectors.groupingBy(Solution::sortString));

残りは既存のコードと非常によく似ています。を使用Map#values()してデータセットからキーを取り除き、結果CollectionラップしてArrayList

new ArrayList<>(Arrays.stream(strs)
        .collect(Collectors.groupingBy(Solution::sortString))
        .values());

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Java 8の学習-マップエントリ用

分類Dev

Java-MVCの学習

分類Dev

Java用Apache POIの学習

分類Dev

再帰Javaの学習

分類Dev

Java EE、jbossなどの学習

分類Dev

JavaによるOpenGLの学習

分類Dev

Javaバッファ戦略の学習

分類Dev

JavaでのSwitchステートメントの学習

分類Dev

Javaの学習、同期キーワードの使用

分類Dev

Javaの「Int」と「Double」の学習を開始

分類Dev

Java-学習順序

分類Dev

Java EEの学習-どこから始めるか

分類Dev

Java Swingの学習(GUIビルダーかどうか)

分類Dev

C ++の後にJavaを学習するための最良の方法

分類Dev

JavaからCへの学習... ...最大の課題は何ですか?

分類Dev

JavaとForループの学習がレンダリングされない

分類Dev

Oracle RDBMSで使用するためにJAVAの学習を開始する方法は?

分類Dev

PHP / Javaを使用している場合、C ++を学習する際の注意点

分類Dev

Javaコンストラクタについて学習する際の問題

分類Dev

機械学習の課題:java / groovyでのプログラムの診断(データマイニング、機械学習)

分類Dev

Java 8の「オプションの」悪い習慣?

分類Dev

学習目的のためのJavaでのシンプルなオープンソースDHT実装

分類Dev

Java:基本的なネットワーキングの学習を始めるのに最適な場所

分類Dev

Javaで決定木を作るための最良の学習アルゴリズム?

分類Dev

Java-テキストマイニングでの機械学習メソッドの実装

分類Dev

Reactの学習-ReferenceError

分類Dev

Railsの高速学習

分類Dev

学習部の配置

分類Dev

Chartjsの学習.destroy()

Related 関連記事

  1. 1

    Java 8の学習-マップエントリ用

  2. 2

    Java-MVCの学習

  3. 3

    Java用Apache POIの学習

  4. 4

    再帰Javaの学習

  5. 5

    Java EE、jbossなどの学習

  6. 6

    JavaによるOpenGLの学習

  7. 7

    Javaバッファ戦略の学習

  8. 8

    JavaでのSwitchステートメントの学習

  9. 9

    Javaの学習、同期キーワードの使用

  10. 10

    Javaの「Int」と「Double」の学習を開始

  11. 11

    Java-学習順序

  12. 12

    Java EEの学習-どこから始めるか

  13. 13

    Java Swingの学習(GUIビルダーかどうか)

  14. 14

    C ++の後にJavaを学習するための最良の方法

  15. 15

    JavaからCへの学習... ...最大の課題は何ですか?

  16. 16

    JavaとForループの学習がレンダリングされない

  17. 17

    Oracle RDBMSで使用するためにJAVAの学習を開始する方法は?

  18. 18

    PHP / Javaを使用している場合、C ++を学習する際の注意点

  19. 19

    Javaコンストラクタについて学習する際の問題

  20. 20

    機械学習の課題:java / groovyでのプログラムの診断(データマイニング、機械学習)

  21. 21

    Java 8の「オプションの」悪い習慣?

  22. 22

    学習目的のためのJavaでのシンプルなオープンソースDHT実装

  23. 23

    Java:基本的なネットワーキングの学習を始めるのに最適な場所

  24. 24

    Javaで決定木を作るための最良の学習アルゴリズム?

  25. 25

    Java-テキストマイニングでの機械学習メソッドの実装

  26. 26

    Reactの学習-ReferenceError

  27. 27

    Railsの高速学習

  28. 28

    学習部の配置

  29. 29

    Chartjsの学習.destroy()

ホットタグ

アーカイブ