我有三个用逗号分隔的列表(公交车,汽车,自行车的列表),我正尝试使用Java 8流将它们写入Java对象属性。
请在下面找到我尝试过的内容:
StringReader
我一直在努力获取所有流并将其注入对象属性。 (在这种情况下,我想创建4个对象,以填充所有3个属性。)
基本上,我正在寻找以下内容:
parse-xml-fragment
答案 0 :(得分:4)
如果要创建流量的 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());
答案 1 :(得分:0)
您只需要拆分字符串,然后将每个值映射到您的对象即可。
在这里,我假设该值可以通过您的Traffic
对象的构造函数传递。如果没有,您可以创建它并在2行中设置其值。如果mapToInt
应该是整数,则value
是必需的。
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());
答案 2 :(得分:0)
如果您真的想要一个数组,可以尝试以下操作
Arrays.stream("5,9,15,86".split(","))
.map(Traffic::new)
.toArray(Traffic[]::new);
如果您也可以使用List<Traffic>
,我推荐这个
Arrays.stream("5,9,15,86".split(","))
.map(Traffic::new)
.collect(Collectors.toList());
最后,例如,如果您仅拥有Integer
的构造函数,则可以将stram映射为int,例如
Arrays.stream("5,9,15,86".split(","))
.mapToInt(Integer::valueOf)
.mapToObj(Traffic::new)
.collect(Collectors.toList());
编辑
我在编辑问题之前回答了这个问题,这就是为什么它只是部分答案的原因
EDIT2
好吧,我明白了,我使用map
而不是mapToObj
是一个巨大的错误...但是由于@JavaMan的有用回答,我发现了它(请注意,如果您使用的是IntelliJ,它会提供您将map
替换为mapToObj
)
答案 3 :(得分:0)
在Traffic类中定义一个构造函数,该构造函数将整数作为参数并将其分配给该类中的value属性。
static class Traffic {
private int value;
public Traffic(int value) {
this.value = value;
}
}
现在假设逗号分隔的字符串在字符串commandList中,如下所示。
String commaList = "1,3,5,6,7,8,9,100";
以下流指令将返回已分配值的Traffic对象列表。
List<Traffic> listOfIntegers =
Arrays.asList(commaList.split(","))
.stream()
.map(e -> new Traffic(Integer.valueOf(e)))
.collect(Collectors.toList());