第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在復(fù)雜的 HashMap 中使用 StringJoiner

在復(fù)雜的 HashMap 中使用 StringJoiner

精慕HU 2022-11-30 14:23:53
我有一個地圖列表如下:List<Map<String,Object>> someObjectsList = new ArrayList<Map<String,Object>>();我在每個 HashMap 中存儲以下數(shù)據(jù)key             value2017-07-21      2017-07-21-07.33.28.4293402017-07-24      2017-07-24-01.23.33.5913402017-07-24      2017-07-24-01.23.33.4923402017-07-21      2017-07-21-07.33.28.429540我想遍歷HashMaps 的列表并檢查鍵是否與任何HashMap值的前 10 個字符匹配,然后我想以以下格式存儲這些鍵和值。即通過使用遙測“逗號”。最終目的是將 HashMap 的唯一鍵及其相對值(如果鍵與任何HashMap值的前 10 個字符匹配)分組到一個新的 HashMap 中。key          value2017-07-21  2017-07-21-07.33.28.429340,2017-07-21-07.33.28.4295402017-07-24  2017-07-24-01.23.33.591340,2017-07-24-01.23.33.492340我正在嘗試使用以下 java 代碼StringJoiner,但沒有得到預(yù)期的結(jié)果。關(guān)于如何在這里構(gòu)建邏輯的任何線索?import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.StringJoiner;public class SampleOne {    public static void main(String[] args) {        // TODO Auto-generated method stub        List<Map<String, Object>> someObjectsList = new ArrayList<Map<String, Object>>();        Map<String, Object> mapOne = new HashMap<String, Object>();        mapOne.put("2017-07-21", "2017-07-21-07.33.28.429340");        Map<String, Object> mapTwo = new HashMap<String, Object>();        mapTwo.put("2017-07-24", "2017-07-24-01.23.33.591340");        Map<String, Object> mapThree = new HashMap<String, Object>();        mapThree.put("2017-07-24", "2017-07-24-01.23.33.492340");        Map<String, Object> mapFour = new HashMap<String, Object>();        mapFour.put("2017-07-21", "2017-07-21-07.33.28.429540");        someObjectsList.add(mapOne);        someObjectsList.add(mapTwo);        someObjectsList.add(mapThree);        someObjectsList.add(mapFour);
查看完整描述

4 回答

?
慕田峪9158850

TA貢獻1794條經(jīng)驗 獲得超7個贊

使用.merge函數(shù):


Map<String, Object> finalMap = new HashMap<String, Object>();


for (Map map : someObjectsList) {

    for (Object key : map.keySet()) {

        String value = ((String) map.get(key));

        finalMap.merge((String) key, value, (k, v) -> k + "," + v);

    }

}

輸出:


{2017-07-21=2017-07-21-07.33.28.429340,2017-07-21-07.33.28.429540, 2017-07-24=2017-07-24-01.23.33.591340,2017-07-24-01.23.33.492340}


同樣可以通過以下一行實現(xiàn):


someObjectsList.stream()

               .flatMap(i -> i.entrySet().stream())

               .collect(Collectors.toMap(Entry::getKey, Entry::getValue, 

                                        (k, v) -> k + "," + v));


查看完整回答
反對 回復(fù) 2022-11-30
?
慕沐林林

TA貢獻2016條經(jīng)驗 獲得超9個贊

你有什么理由Object過度使用String并避免安全檢查?也就是說,它不是“前 10 個字符”,你想看看是否value以key句號開頭(你所有的鍵都是 10 個字符)。所以在那種情況下你可以這樣做if (value.startsWith(key)) { ... }。如果 stringjoiner 未滿,請不要忘記您的換行符。最后,您不需要 a List, aMap可以一次容納多個密鑰。另一種方法:


//LinkedHashMap will preserve our insertion order

Map<String, String> map = new LinkedHashMap<>();

map.put("2017-07-21", "2017-07-21-07.33.28.429340");

map.put("2017-07-24", "2017-07-24-01.23.33.591340");

//note duplicates are overwritten, but no value change here

map.put("2017-07-24", "2017-07-24-01.23.33.492340");

map.put("2017-07-21", "2017-07-21-07.33.28.429540");

//  You can also use Java 8 streams for the concatenation

//  but I left it simple

List<String> matches = map.entrySet()

        .filter(e -> e.getValue().startsWith(e.getKey())

        .collect(Collectors.toList());

String concatenated = String.join("\n", matches);

如果你想生成沒有流的字符串,它看起來像這樣(同樣,#entrySet為了簡單起見不使用,但在這里會更有效率):


List<String> matches = new ArrayList<>();

StringJoiner joiner = new StringJoiner("\n");

for (String key : map.keySet()) {

    String value = map.get(key);

    if (value.startsWith(key)) {

        joiner.add(value);

    }

}

//joiner#toString will give the expected result


查看完整回答
反對 回復(fù) 2022-11-30
?
慕無忌1623718

TA貢獻1744條經(jīng)驗 獲得超4個贊

您正在尋找處理 a 的分組行為List。你可以利用的優(yōu)勢java流自從Java-8. 在任何情況下,您都需要一個新Map的來存儲值以便打印它們。:


someObjectsList.stream()

        .flatMap(i -> i.entrySet().stream())               // flatmapping to entries

        .collect(Collectors.groupingBy(Entry::getKey))     // grouping them using the key

如果您想使用 for 循環(huán)。在這種情況下,它會更難,因為每個列表項中可能會出現(xiàn)更多條目:


final Map<String, List<Object>> map = new HashMap<>();

for (Map<String, Object> m: someObjectsList) {          // iterate List<Map>

    for (Entry<String, Object> entry: m.entrySet()) {   // iterate entries of each Map

        List<Object> list;

        final String key = entry.getKey();              // key of the entry

        final Object value = entry.getValue();          // value of the entry

        if (map.containsKey(key)) {                     // if the key exists

            list = map.get(key);                        // ... use it

        } else {

            list = new ArrayList<>();                   // ... or else create a new one

        }

        list.add(value);                                // add the new value

        map.put(key, list);                             // and add/update the entry

    }

}

在這兩種情況下打印出來Map<String, List<Object>> map將產(chǎn)生以下輸出:


2017-07-21=[2017-07-21-07.33.28.429340, 2017-07-21-07.33.28.429540], 

2017-07-24=[2017-07-24-01.23.33.591340, 2017-07-24-01.23.33.492340]


查看完整回答
反對 回復(fù) 2022-11-30
?
繁花如伊

TA貢獻2012條經(jīng)驗 獲得超12個贊

在您的代碼中,您在每張地圖上使用不同的 StringJoiner。因此,它正在創(chuàng)建它的一個新實例。


您可以將鑰匙保存在地圖上。示例代碼:(編輯:我沒有刪除您的 StringJoiner 部分。)


public static void main(String[] args) {

        // TODO Auto-generated method stub

        List<Map<String, Object>> someObjectsList = new ArrayList<Map<String, Object>>();


        Map<String, Object> mapOne = new HashMap<String, Object>();

        mapOne.put("2017-07-21", "2017-07-21-07.33.28.429340");


        Map<String, Object> mapTwo = new HashMap<String, Object>();

        mapTwo.put("2017-07-24", "2017-07-24-01.23.33.591340");


        Map<String, Object> mapThree = new HashMap<String, Object>();

        mapThree.put("2017-07-24", "2017-07-24-01.23.33.492340");


        Map<String, Object> mapFour = new HashMap<String, Object>();

        mapFour.put("2017-07-21", "2017-07-21-07.33.28.429540");


        someObjectsList.add(mapOne);

        someObjectsList.add(mapTwo);

        someObjectsList.add(mapThree);

        someObjectsList.add(mapFour);


        Map<String, Object> outputMap = new HashMap<String, Object>();


        for (Map map : someObjectsList) {

            StringJoiner sj = new StringJoiner(",");

            for (Object key : map.keySet()) {

                String value = ((String) map.get(key));

                String date = value.substring(0, Math.min(value.length(), 10));

                //System.out.println(str);

                //System.out.println(value);


                if(key.equals(date)) {

                    sj.add(value);

                    System.out.println(sj.toString());

                    if(outputMap.containsKey(key)) {

                        String str = (String) map.get(key);

                        str = str + "," + value;

                        outputMap.put((String)key, str);

                    } else {

                        outputMap.put((String)key, value);

                    }

                }

            }

        }


        for (String map : outputMap.keySet()) {

             System.out.println(map + " " + outputMap.get(map));

        }

    }


查看完整回答
反對 回復(fù) 2022-11-30
  • 4 回答
  • 0 關(guān)注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號