java - 如何在 Java 流中配对不均匀列表

标签 java java-stream

我有一个点列表以及点之间的距离,我想要做的是创建段,其中段由起点和终点以及两点之间的距离组成。

使用简单的 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/

相关文章:

java - 在 java 流中的映射中使用多个映射函数与 block 语句

java - 当我到处使用 Spring 时,是否值得拥有一个静态 Builder 类

java - ArrayList 的内容消失了

java - Java中使用递归方法的密码哈希链

java - 流过滤器效果不佳我想打印 10 行

java - java 8 中两个列表对象的交集

java - 如何使用Java流计算List成员之间的变化?

java - 为什么 IntStream.range(0, 100000).parallel().foreach 需要比正常循环更长的时间

java - 使用嵌套选择时是否可能出现 N+1 问题?

java - 如何获取包含参数的请求字符串