文字列で地図キー要件へのJava 8イニングラムダ地図<文字列、リスト<文字列>>

TheDude537:

5のようになり、その不在マストCONCATENATE何か場合は、各キーが必要ではなく、「 - - []」のマップのキーは、値1であってもよいです。

私は少し前のJava 8を使用しましたし、私はこのように感じる(ストリームをより効率的に行うことができます)とコレクト()が、外部リストの要件が私を投げているような気がします。以下のコードは動作しますが、間違って感じています。

List<String> ids = Arrays.asList("1", "2", "3", "4", "5");

StringBuilder location = new StringBuilder();

ids.forEach(id -> {
    List<String> addresses = map.get(id);
    if (addresses != null) {
        addresses.forEach(addr -> location.append(addr + " - "));
    } else {
        location.append(" [] - ");
    }
});

コロラド州の場所のために何かをこのように見えることを生成します。

US - CO - [] - CENTENNIAL -

ニコラス・Kへの答えではマップの例は次のようになります

{1=[US], 2=[CO], 5=[METROPOLITAN FOOTBALL STADIUM DISTRICT, REGIONAL TRANSPORTATION DISTRICT]}

そして、出力を受け取ることが期待されます

US - CO - [] - [] - METROPOLITAN FOOTBALL STADIUM DISTRICT - REGIONAL TRANSPORTATION DISTRICT
Magnilex:

マップ内の欠損値を処理するための正しい方法はあるcomputeIfAbsent()の新しい方法であるMapJavaの8以降で利用可能。

これはあなたに以下のコードを示します:

String s = ids.stream()
    .map(id -> map.computeIfAbsent(id, absentKey -> singletonList("[]")))
    .flatMap(Collection::stream)
    .collect(Collectors.joining(" - "));
  • まず、あなたが保存されているマップ内のキー、上の流れを聞かせてidsリスト変数。
  • その後、値がnull、マップがデフォルト値にある場合は("[]")、それ以外のcomputeIfAbsent()リターン実際の値。
  • あなたは、で区切られたすべての値を印刷したいので" - "、ちょうどフラットリストのストリームをマッピングしてそれらを結合してみましょう" - "

s (あなたの例のマップで使用している場合)は、現在値を保持します。

"US - CO - [] - [] - METROPOLITAN FOOTBALL STADIUM DISTRICT - REGIONAL TRANSPORTATION DISTRICT"

末尾がないことに注意してください" - "Collectors.joining()前または要素の後に区切り文字を追加していないことを確認することができます。

おすすめ

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