猿问

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

我有以下课程:


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);

我想使用 Java 流Map<String, List<Result>>从给定的输入列表中创建一个。此外,列表值需要根据字段(x 和 y)按升序排序

映射的键是由冒号连接的 systemid 和文件名的组合。我尝试通过 systemid 和文件名的组合进行分组,但无法继续使用该方法。


慕斯王
浏览 136回答 1
1回答

阿晨1998

您可以将groupingBy收集器与mapping下游一起使用:Map<String,&nbsp;List<Result>>&nbsp;map&nbsp;=&nbsp;data.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.groupingBy(a&nbsp;->&nbsp;a.getSystemId()&nbsp;+&nbsp;":"&nbsp;+&nbsp;a.getFileName() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;Collectors.mapping(a&nbsp;->&nbsp;new&nbsp;Result(a.getX(),&nbsp;a.getY()), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collectors.toList())));
随时随地看视频慕课网APP

相关分类

Java
我要回答