为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯王 2023-02-16 16:24:21
我有以下课程: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 和文件名的组合进行分组,但无法继续使用该方法。
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

您可以将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())));


查看完整回答
反对 回复 2023-02-16
  • 1 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信