Java 8逗号分隔字符串到对象属性

Java 8逗号分隔字符串到对象属性,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我有三个逗号分隔的列表,分别是bus、car和cycle,我正在尝试使用Java8流将它们写入Java对象属性 请在下面找到我尝试过的内容: public class Traffic { public int car; public int bus; public int cycle; public Traffic(int car, int bus,int cycle){ this.car = car; this.bus = b

我有三个逗号分隔的列表,分别是bus、car和cycle,我正在尝试使用Java8流将它们写入Java对象属性

请在下面找到我尝试过的内容:

public class Traffic {

    public int car;
    public int bus;
    public int cycle;

    public Traffic(int car, int bus,int cycle){
        this.car = car;
        this.bus = bus;
        this.cycle = cycle;
    }

}

public class Test {

    public static void main(String[] args) {

        String bus = "5,9,15,86";
        String car = "6,12,18,51";
        String cycle = "81,200,576,894";
        String[] busArray = bus.split(",");
        String[] carArray = car.split(",");
        String[] cycleArray = cycle.split(",");

        List<Traffic> trafficList =
                Arrays.stream(values)
                        .mapToInt(Integer::parseInt)
                        .mapToObj((int i,j) -> new Traffic(i,j))
                        .collect(Collectors.toList());
    }

}
我一直在努力将所有流向上注入到对象属性中。在这种情况下,我想创建4个对象来填充所有3个属性

基本上,我正在寻找以下内容:

List<Traffic> trafficList =
                Arrays.stream(carArray,busArray,cycleArray)
                        .mapToInt(Integer::parseInt)
                        .mapToObj((int i,j,k) -> new Traffic(i,j,k))
                        .collect(Collectors.toList());

您只需拆分字符串,然后将每个值映射到对象

在这里,我假设该值可以通过您的流量对象的构造函数传递。如果没有,可以创建它并在两行中设置其值。如果值应为整数,则需要mapToInt

String original = "5,9,15,86";
String[] values = original.split(",");

List<Traffic> trafficList = 
   Arrays.stream(values)
      .mapToInt(Integer::parseInt)
      .map(Traffic::new) 
      .collect(Collectors.toList());

如果您确实想要一个数组,可以尝试以下方法

Arrays.stream("5,9,15,86".split(","))
        .map(Traffic::new)
        .toArray(Traffic[]::new);
如果一份清单对你也合适,我推荐这一份

Arrays.stream("5,9,15,86".split(","))
        .map(Traffic::new)
        .collect(Collectors.toList());
最后,如果你只有一个整数的构造函数,比如,你可以把stram映射成int

Arrays.stream("5,9,15,86".split(","))
        .mapToInt(Integer::valueOf)
        .mapToObj(Traffic::new)
        .collect(Collectors.toList());
编辑

我在问题编辑之前回答了这个问题,这就是为什么它只是一个部分答案

编辑2


好的,我知道了,我用地图代替mapToObj多大的错误。。。但多亏@JavaMan的有用回答,我发现了这一点。请注意,如果您使用IntelliJ,它提供了用mapToObj替换map的功能。请在类流量中定义一个构造函数,该构造函数将整数作为参数,并将其赋给类中的value属性

    static class Traffic {
      private int value;
      public Traffic(int value) {
        this.value = value;
      }
    }
现在假设逗号分隔的字符串位于字符串命令列表中,如下所示

String commaList = "1,3,5,6,7,8,9,100";
下面的流指令将返回具有指定值的流量对象列表

    List<Traffic> listOfIntegers = 
      Arrays.asList(commaList.split(","))
        .stream()
        .map(e -> new Traffic(Integer.valueOf(e)))
        .collect(Collectors.toList());
如果要创建4个流量对象,则可以使用以下方法:

List<Traffic> collect = IntStream.range(0, busArray.length)
                          .mapToObj(i -> new Traffic(Integer.parseInt(busArray[i]),
                                                     Integer.parseInt(carArray[i]),
                                                     Integer.parseInt(cycleArray[i])))
                          .collect(Collectors.toList());

你希望最终得到4个不同的交通对象吗?回答一个错误的问题感觉很糟糕,然后其他人得到了正确的答案,因为OP编辑了这个问题…:/恐怕您的解决方案永远不会奏效,因为您概述的解决方案不会将分割值复制到对象属性。此外,如果您尝试您的代码,那么它将给出一个编译错误。无论如何,这个问题已经尘埃落定。如果carArray的元素比busArray少呢?你根本不在乎IndexOutOfBoundsException。或者您可以显式地编写IntStream.range0,4@JavaMan你注意到这个答案也有我以前的错误吗?