我有一个点列表以及点之间的距离,我想要做的是创建段,其中段由起点和终点以及两点之间的距离组成。
使用简单的 for 循环我可以执行以下操作:
public static void main(String[] args) {
List<String> points = Arrays.asList("A", "B", "C", "D");
List<Double> distances = Arrays.asList(1.5, 2.5, 3.5);
for(int x=0; x< distances.size(); x++) {
new Segment(points.get(x), points.get(x+1), distances.get(x));
}
}
static class Segment {
private String startPoint;
private String endPoint;
private double distance;
public Segment(String startPoint, String endPoint, double distance)
{
this.startPoint = startPoint;
this.endPoint = endPoint;
this.distance = distance;
}
}
但是,有没有一种好的方法可以对流执行相同的操作,并且不会增加代码的复杂性?
最佳答案
要使用流来完成此操作,您最终会做同样的事情,即迭代索引值:
List<Segment> list = IntStream.range(0, distances.size())
.mapToObj(x -> new Segment(points.get(x), points.get(x+1), distances.get(x)))
.collect(Collectors.toList());
等同于:
List<Segment> list = new ArrayList<>();
for (int x = 0; x < distances.size(); x++)
list.add(new Segment(points.get(x), points.get(x+1), distances.get(x)));
除非new Segment()
非常慢并且可以从并行处理中受益,否则您不会通过使用流获得任何好处,而且它实际上运行得更慢。
关于java - 如何在 Java 流中配对不均匀列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51957915/