2 回答
TA貢獻1815條經驗 獲得超10個贊
List<DTO> dtoList = getDTOList(); // returns list of DTO object
Map<String,Map<String,String> mapCollection
= getMapCollection(); // return String, Map<String,String> pairs
List<Map<String,String>> result = new HashMap<>();
// iterate over dto list
for(DTO singleDTO : dtoList) {
Map<String,String> singleResult = new HashMap<>();
// Add all fields in map
singleResult.put("id",singleDTO.getId());
singleResult.put("name",singleDTO.getName());
singleResult.put("desc",singleDTO.getDesc());
// fetch single map by id lookup
Map<String,Strig> singleMap = mapCollection.get(singleDTO.getId());
// fetch all entries from map
Set<Map.Entry<String,String>> entrySet = singleMap.entrySet();
// add them in hashmap
for(Map.Entry<String,String> singleEntry : entrySet) {
singleResult.put(singleEntry.getKey(),singleEntry.getValue());
Add map in the list
result.add(singleEntry);
}}
//result
[
{
"id":"1", "name":"abc", "desc":"some desc abc", "ID":"1", "mapField1":"field1 value", "mapField2":"field1 value"
},
{
"id":"1", "name":"xyz", "desc":"some desc xyz", "ID":"1", "mapField1":"field1 value", "mapField2":"field1 value"
},
{
"id":"2", "name":"pqr", "desc":"some desc pqr", "ID":"2", "mapField1":"field1 value 2", "mapField2":"field1 value2"
}
]
TA貢獻1856條經驗 獲得超17個贊
假設
假設您的初始對象的類型Item如下所述。
class Item {
String fieldA,fieldB,fieldC;
// Getters / Setter
}
假設您的初始列表Item被稱為items
假設您的初始地圖被調用map并且是類型Map<String, Map<String,String>>
解決方案
向 Item 類添加一個方法以返回Map<String, String>對象的表示
public Map<String, String> toMap() {
return new HashMap<String, String>() {{
put("fieldA", fieldA);
put("fieldB", fieldB);
put("fieldC", fieldC);
}};
}
創建一個方法來獲取fieldD給定fieldA值的值
private String getFieldDValueForFieldAValue(String fieldAValue) {
return map.get(fieldAValue).get("fieldD");
}
創建一種方法以將正確的fieldD值添加到項映射
private Map<String, String> addFieldD(Map<String, String> itemMap) {
itemMap.put("fieldD", getFieldDValueForFieldAValue(itemMap.get("fieldA")));
return itemMap;
}
fieldD然后您可以為每個具有正確值的對象生成一個映射列表
List<Map<String, String>> list = items.stream()
.map(Item::toMap) // Converts all Items to Maps
.map(m -> addFieldD(m)) // Adds the correct fieldD value to each Map
.collect(Collectors.toList()); // make it a List
最后用它制作一個 JSON 字符串:
Type listType = new TypeToken<List<Map<String, String>>>() {}.getType();
Gson gson = new Gson();
String json = gson.toJson(list, listType);
System.out.println(json);
這將輸出以下 JSON:
[
{"fieldA":"lookupval1","fieldC":"val3","fieldB":"val2","fieldD":"xxx"},
{"fieldA":"lookupval1","fieldC":"val6","fieldB":"val5","fieldD":"xxx"},
{"fieldA":"lookupval2","fieldC":"val9","fieldB":"val8","fieldD":"yyy"}
]
添加回答
舉報
