Java 8逗号分隔字符串到对象属性
我有三个逗号分隔的列表,分别是bus、car和cycle,我正在尝试使用Java8流将它们写入Java对象属性 请在下面找到我尝试过的内容: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
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你注意到这个答案也有我以前的错误吗?