java - 如何在 Stream Java8 中进行计算操作?
问题描述
是)我有的:
List<String> allGroupsPoint = Arrays.asList(
"1.0 1.0 1.0 4.0 5.0 4.0 5.0 1.0",
"1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0",
"1.0 1.0 1.0 4.0 5.0 4.0 5.0 1.0");
第 1 步:需要通过我的方法将所有字符串从转换List<String> allGroupsPoint
为。第 2 步: 我得到每个线阵列:List<Point[]> arrayPoints
double[] dataParser.parse(String s)
double[]
double[] digits = dataParser.parse(String s)
每个数组的大小为 8(因为一个字符串只有 8 个数字)
第 3 步:需要将此数组double
转换为 ObjectPoint[]
以获取4
对象(每 1 个对象 2 个数字)。像这样:
Point p1 = new Point(digits[0], digits[1]);
Point p2 = new Point(digits[2], digits[3]);
Point p3 = new Point(digits[4], digits[5]);
Point p4 = new Point(digits[6], digits[7]);
第 4 步:结束p1
, p2
, p3
, p4
to List<Point[] x>
。
我试过这个,但不起作用:
List<Point[]> test = allGroupsPoint.stream()
.map(s -> dataParser.parseString(s))
.map(Point[]::new)
.collect(Collectors.toList());
我不知道如何在 Stream 中执行STEP 3。
解决方案
试试这个。
List<String> allGroupsPoint = Arrays.asList(
"1.0 1.0 1.0 4.0 5.0 4.0 5.0 1.0",
"1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0",
"1.0 1.0 1.0 4.0 5.0 4.0 5.0 1.0");
List<Point[]> arrayPoints = allGroupsPoint.stream()
.map(line -> dataParser.parse(line)) // or .map(line -> dataParser.parseString(line))
.map(array -> IntStream.range(0, array.length / 2)
.mapToObj(i -> new Point(array[i * 2], array[i * 2 + 1]))
.toArray(Point[]::new))
.collect(Collectors.toList());
for (Point[] x : arrayPoints)
System.out.println(Arrays.toString(x));
输出:
[Point(1.0, 1.0), Point(1.0, 4.0), Point(5.0, 4.0), Point(5.0, 1.0)]
[Point(1.0, 2.0), Point(3.0, 4.0), Point(5.0, 6.0), Point(7.0, 8.0)]
[Point(1.0, 1.0), Point(1.0, 4.0), Point(5.0, 4.0), Point(5.0, 1.0)]
推荐阅读
- javascript - 如何制作具有实时预览和光标的编辑器
- c# - EF Core 3 - 简单的“在哪里”查询抛出错误?
- unix - 编译器将打印版本但在构建时冻结
- awk - AWK从不同行搜索模式并求和
- javascript - 如何将日期转换为时间戳,或者最好如何将 n 天数添加到 javascript 中的时间戳
- ruby - 覆盖实例变量的 << 方法
- ios - 关闭导航目的地时删除单元格突出显示
- java - 如何调用引用泛型类型的接口字段?
- java - 如何让“mvn compile”包含“provided”范围依赖?
- android - 在 Android 上创建 React App PWA 推送通知