1

私は地図を持っています

Map<Object, Map<String, Object>> salesReportForSoldPropertyMap= salesReportForSoldProperty.stream().collect(Collectors.toMap(tags -> tags.get("E"), Function.identity()));

Map を JSON に変換すると、これが得られます

  {
  "Sold Promissory Buyer": 
    {
      "A": 2616100,
      "B": 2616100,
      "C": 31,
      "D": "Sold Promissory Buyer"
    },
  "Auction": 
    {
      "A": 101322143.24,
      "B": 50243301.2,
      "C": 569,
      "D": "Auction"
    },
  "Sold Third Party":
    {
      "A": 72000,
      "B": 93900,
      "C": 1,
      "D": "Sold Third Party"
    }      
}

しかし、ここで問題があります。JSON キーに空白と「-」を入れたくないのです。では、JAVA Stream API で解決できますか?空白と「-」を除いたマップのキーが得られますか? 同様のキー「Sold Third Party」は「SoldThirdParty」である必要があります

4

1 に答える 1

2

toMapコレクターを介して、値が変更されていないキーを変換できます。

Map<String, Map<String, Object>> result = input.entrySet().stream()
    .collect(Collectors.toMap(e -> e.getKey().toString().replaceAll("[- ]", ""),
                              e -> e.getValue()));

(String)e.getKey()元のキーはオブジェクトであり、キャスト () または呼び出しによって文字列に変換する必要があることに注意してくださいtoString()

置換を適用すると、異なるキーが同じになる場合があることに注意してください。たとえば、元のマップに"A-B""AB"キーが含まれていた場合、両方とも に変換され"AB"ます。この場合Collectors.toMapは をスローしIllegalStateExceptionます。このような場合を特別に処理するには、merge 関数を 3 番目のtoMapパラメーターとして指定できます。

于 2016-02-03T07:39:47.187 に答える