Javaで文字列配列にリストの要素を配置する方法

ダニエル・ベネディクト:

Javaで文字列配列にリスト要素を配置する方法はありますか?私は、カスタムコンパレータを使用して値によって地図をソートし、今で配列にキー(文字列)の要素を入れしようとしています。私が見つけた唯一の方法は、同時にアレイと分類されたリストをループして、アレイそのように埋めるが、それはそれだけに最後の要素を入れています。

例:ソートなしのマイマップ: {a=5, b=2, c=8, d=1}

カスタムコンパレータでソートした後: [c=8, a=5, b=2, d=1]

今、私は単にキー値(配置する必要がc,aタプルになど)タプルの長さです。final String[] lettersWithBigValues = new String[n]n

しかし、後:

for (int i = 0; i < Integer.parseInt(args[1]); i++) { System.out.println(lettersWithBigValues[i]+","); }

コンソールは戻っています:d,d,d,dコンソールライン引数が4であることを考えます

ここでは、完全な機能は次のとおりです。

public String[] getTopLettersWithValues(final int n){
        final String[] lettersWithBigValues = new String[n];

        final Map<String, Integer> myMap = new HashMap<>();

        int counter = 0;

        for (final List<String> record : records) {

            if (!myMap.containsKey(record.get(1))) {
                myMap.put(record.get(1), counter += Integer.parseInt(record.get(4)));
            } else {
                myMap.computeIfPresent(record.get(1), (k,v) -> v + Integer.parseInt(record.get(4)));
            }
        }

        System.out.println(myMap);

        List<Map.Entry<String, Integer>> sorted = new LinkedList<>(myMap.entrySet());

        // Sort list with list.sort(), using a custom Comparator
        sorted.sort(valueComparator);

        System.out.println(sorted);

        for (int i = 0; i < lettersWithBigValues.length; i++) {
            for (Map.Entry<String, Integer> values: sorted) {
                lettersWithBigValues[i] = values.getKey();
            }
        }
         return lettersWithBigValues;
    }

レコードがデータの一覧がある場合は、CSVファイルから読み込みます。

そして、ここでコンパレータは次のとおりです。

    public Comparator<Map.Entry<String, Integer>> valueComparator = (o1, o2) -> {

        Integer v1 = o1.getValue();

        Integer v2 = o2.getValue();

        return v2.compareTo(v1);
    };
また:

次のようにキーの配列を達成することができます。

String [] lettersWithBigValues = myMap.entrySet().stream() // entries of your intial map
        .sorted(valueComparator) // sorted by your comparator
        .map(Map.Entry::getKey) // mapped to only the key e.g. 'd', 'a'
        .toArray(String[]::new); // converted to array

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=301217&siteId=1