简体   繁体   English

在Java 8中从列表创建字符串和对象的映射

[英]Creating a map of String and Object from a List in Java 8

I have the following classes: 我有以下课程:

class Data {
        String systemId;
        String fileName;
        int x;
        int y;

        Data(String systemId, String fileName, int x, int y) {
            this.systemId = systemId;
            this.fileName = fileName;
            this.x = x;
            this.y = y;
        }
        public String getSystemId() {
            return systemId;
        }

        public void setSystemId(String systemId) {
            this.systemId = systemId;
        }

        public String getFileName() {
            return fileName;
        }

        public void setFileName(String fileName) {
            this.fileName = fileName;
        }

        public int getX() {
            return x;
        }

        public void setX(int x) {
            this.x = x;
        }

        public int getY() {
            return y;
        }

        public void setY(int y) {
            this.y = y;
        }
    }


class Result {
        int x;
        int y;

        Result(int x, int y) {
            this.x = x;
            this.y = y;
        }

        public int getX() {
            return x;
        }

        public void setX(int x) {
            this.x = x;
        }

        public int getY() {
            return y;
        }

        public void setY(int y) {
            this.y = y;
        }
    }

List<Data> dataList = new ArrayList<>();
Data x1 = new Data("n1", "f1", 1, 2);
Data x2 = new Data("n1", "f1", 3, 4);
Data x3 = new Data("n1", "f1", 5, 6);
Data x4 = new Data("n1", "f2", 7, 8);
Data x5 = new Data("n2", "f1", 9, 10);
Data x6 = new Data("n2", "f2", 11, 12);
Data x7 = new Data("n3", "f1", 13, 14);
Data x8 = new Data("n4", "f1", 15, 16);

dataList.add(x1);dataList.add(x2);dataList.add(x3);dataList.add(x4);dataList.add(x5);dataList.add(x6);dataList.add(x7);dataList.add(x8);

I want to use Java streams to create a Map<String, List<Result>> out of the given input list. 我想使用Java流从给定的输入列表中创建Map<String, List<Result>> Also, the list values needs to be sorted in ascending order according to fields (x and y) 另外,列表值需要根据字段(x和y)以升序排序

I need the output map to be as follows: 我需要输出映射如下:

{"n1:f1" : [(1, 2), (3, 4), (5, 6)]
 "n1:f2" : [(7, 8)]
 "n2:f1" : [(9, 10)]
 "n2:f2" : [(11, 12)]
 "n3:f1" : [(13, 14)]
 "n4:f1" : [(15, 16)]
}

The key for the map is the combination of systemid and filename concatenated by colon. 映射的键是由冒号连接的systemid和文件名的组合。 I tried grouping by the combination of systemid and filename but was not able to proceed with that approach. 我尝试通过systemid和filename的组合进行分组,但是无法继续使用该方法。

You can use groupingBy collector with mapping downstream as : 您可以将groupingBy收集器与下游mapping一起使用:

Map<String, List<Result>> map = data.stream()
        .collect(Collectors.groupingBy(a -> a.getSystemId() + ":" + a.getFileName()
                , Collectors.mapping(a -> new Result(a.getX(), a.getY()),
                        Collectors.toList())));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 比较列表<map<string, string> &gt; 到列表<map<string, object> &gt; Java </map<string,></map<string,> - Comparing a List<Map<String, String>> to a List<Map<String, Object>> Java 从列表中删除对象 <Map<String,Object> &gt;在Java中 - removing objects from List<Map<String,Object>> in Java 如何获取地图<String, List<Object> &gt; 来自 Java 8 中的流 - How get a Map<String, List<Object>> from a Stream in Java 8 处理 Map 列表<String,List<Object> &gt; 在 Java 8 中 - Processing a list of Map<String,List<Object>> in java 8 如何将Map <String,string>添加到java中的Map <String,List <Object >>中 - How to add Map<String, string> into Map<String, List<Object>> in java 创建HashMap <String,Map> 从列表&lt;地图 <String,Object> &gt;给出java.lang.ClassCastException - Create HashMap<String,Map> from List < Map<String,Object>> gives java.lang.ClassCastException Java 8 过滤器和列表收集<Map<String, Object> &gt; - Java 8 Filter and Collect of List<Map<String, Object>> 将 JSON 转换为 Map <string, list<object> &gt; 在 java</string,> - Convert JSON to Map<String, List<Object>> in java Java 8收集到Map <String, List<Object> &gt; - Java 8 collect to Map<String, List<Object>> 如何迭代列表<Map<String,Object> &gt; 在 Java 中 - How to iterate List<Map<String,Object>> in java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM