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

时间:2019-01-24 16:41:45

标签: java lambda java-8 java-stream

我有三个用逗号分隔的列表(公交车,汽车,自行车的列表),我正尝试使用Java 8流将它们写入Java对象属性。

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

StringReader

我一直在努力获取所有流并将其注入对象属性。 (在这种情况下,我想创建4个对象,以填充所有3个属性。)

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

parse-xml-fragment

4 个答案:

答案 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());