2016-02-02 2 views
1

У меня есть список List<Map<String, Object>> как этотМожно ли преобразовать List <Map <String, Object >> к карте <Object, Map <String, Object >> с помощью GroupBy потока API

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

Использование поток API с помощью метода GroupBy salesReportForSoldProperty.stream().collect(Collectors.groupingBy(tags -> tags.get("D"))), я смог получить Collection Map<Object, List<Map<String, Object>>>
Но когда я пытаюсь создать JSON из этой коллекции, я получаю 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" 
    } 
    ] 
} 

Здесь каждое значение JSONArray, потому что я получаю Map<Object, List<Map<String, Object>>>. Есть ли способ, чтобы получить Map<Object, Map<String, Object>> коллекцию, используя поток API, так что я могу получить правильный JSON (без стоимости JSONArray)

ответ

2

Вы должны использовать Collectors.toMap вместо:

salesReportForSoldProperty.stream().collect(
    Collectors.toMap(tags -> tags.get("D"), Function.identity())); 

Обратите внимание, что в этом случае, если ваш вход содержит два элемента с одинаковым значением "D", вы получите IllegalStateException, так как вы не можете поместить два значения в один и тот же ключ карты. Если вы хотите игнорировать дубликаты, вы можете указать функцию слияния в качестве третьего аргумента:

salesReportForSoldProperty.stream().collect(
    Collectors.toMap(tags -> tags.get("D"), Function.identity(), (a, b) -> a)); 
+0

Thank you Tagir. Я попробую. Не могли бы вы рассказать мне, какой пакет мне нужно импортировать для использования Function.identity()? –

+1

@SonuGupta, 'java.util.function' –

+0

Это работает хорошо. Большое вам спасибо за вашу помощь. –

Смежные вопросы