亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Java 中合并兩個對象的屬性?(用戶定義類的屬性和映射的鍵值)

如何在 Java 中合并兩個對象的屬性?(用戶定義類的屬性和映射的鍵值)

撒科打諢 2023-03-02 15:20:42
我正在開發 spring boot 應用程序并且有兩個對象,一個是自定義類的列表,另一個是字符串鍵和字符串值的映射。前任。DTO object with fixed fields fieldA,fieldB,fieldc. [{"fieldA": "lookupval1","fieldB": "val2","fieldc":"val3"},{"fieldA": "lookupval1","fieldB": "val5","fieldc":"val6"}{"fieldA": "lookupval2","fieldB": "val8","fieldc":"val9"}]另外請注意,此字段 A 的前兩個對象具有重復值然后我有Map<String,Map<String,String>如下圖的地圖{    lookupval1= {fieldA:"lookupval1",fieldD:"xxx",.............},    lookupval2= {fieldA:"lookupval2",fieldD:"yyy",.............}.    .    .    .}我想要的是,我想將列表中的每一項中的字段與Map中的字段組合起來,我可以通過獲取fieldA的查找值在map中找到相應的鍵。字段A:lookupval1然后我想將該響應發送到 REST 客戶端,執行此操作的有效方法和數據結構是什么?預期結果:[{"fieldA": "lookupval1","fieldB": "val2","fieldc":"val3",fieldD:"xxx"},{"fieldA": "lookupval1","fieldB": "val2","fieldc":"val3",fieldD:"xxx"}{"fieldA": "lookupval2","fieldB": "val8","fieldc":"val9",fieldD:"yyy"}]]更新:下面是 DTO 對象的結構和 Map 的確切類型。class DTO {    int id;    String name;    String desc;}List<DTO> dtoList = getDTOList(); // returns list of DTO objectMap<String,Map<String,String> mapCollection    = getMapCollection(); // return String, Map<String,String> pairs此處 mapCollection 中的鍵始終等于 DTO 的 id,并且 DTO 列表將具有重復值。我已經按照我的方式發布了答案,但正在尋找更好的替代方法來減少計算量。
查看完整描述

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"

    }     

 ]


查看完整回答
反對 回復 2023-03-02
?
慕慕森

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"}

]


查看完整回答
反對 回復 2023-03-02
  • 2 回答
  • 0 關注
  • 265 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號