簡體   English   中英

如何使用 Java 映射<String, Arraylist<Integer> &gt;

[英]How to work with Java map with<String, Arraylist<Integer>>

我在java中有一個映射,它以字符串為鍵,以整數列表為值。 我的查詢返回以下集合“Day:1, Day:2, Day:3, Month:1, Year:15, Year:20, Year:25”

意思是,我隨機有每個鍵的鍵和不同的值。我期待一個映射的輸出,它具有唯一的鍵和對應的 int 值列表,如下所示:

{ 
"day": [1,2,3],
"Month": [1],
"year": [15,20,25]
}

請幫忙

public static void main(String[] args){
    String input = "Day:1, Day:2, Day:3, Month:1, Year:15, Year:20, Year:25";
    List<String> list = Arrays.asList(input.split(","));
    
    JSONObject jsonObject = new JSONObject();
    
    for (String val : list) {
        String[] splitedValues = val.split(":");
        if(jsonObject.has(splitedValues[0].trim())) {
            jsonObject.getJSONArray(splitedValues[0].trim()).put(Integer.valueOf(splitedValues[1]));
        }else {
            List<Integer> integers = new ArrayList<Integer>(); 
            integers.add(Integer.valueOf(splitedValues[1]));
            jsonObject.put(splitedValues[0].trim(), integers);
        }
    }
    System.out.println(jsonObject);
}

輸出

{"Month":[1],"Year":[15,20,25],"Day":[1,2,3]}

請找到下面的代碼。 我創建了一個內部類來映射類型和值,然后通過對類型進行分組來收集它。

import java.util.Map;
import java.util.stream.Collectors;

import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.toList;

public class StringToMap {
    public static void main(String[] args) {
        String queryOutput = "Day:1, Day:2, Day:3, Month:1, Year:15, Year:20, Year:25";
        System.out.println(groupByTypeAndAddValuesToList(queryOutput));
    }

    private static Map<String, List<Integer>> groupByTypeAndAddValuesToList(String queryOutput) {
        final String[] split = queryOutput.split(",");
        return Arrays.stream(split).map(s -> {
            final String trimmed = s.trim();
            final String[] splitByColon = trimmed.split(":");
            return new TypeValues(splitByColon[0], Integer.parseInt(splitByColon[1]));
        }).collect(groupingBy(TypeValues::getType, Collectors.mapping(TypeValues::getValue, toList())));
    }

    private static class TypeValues {
        private final String type;
        private final Integer value;

        public TypeValues(String type, Integer value) {
            this.type = type;
            this.value = value;
        }

        public String getType() {
            return type;
        }

        public Integer getValue() {
            return value;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM