将由空格分隔的字符串转换为一行中的整数的arraylist

时间:2018-02-10 14:35:57

标签: java string arraylist int java-stream

说我有字符串"5 12 4"。我想把它变成一个ArrayList整数,在一个功能行中包含5,12和4。

我认为应该有一种方法可以通过组合split(" ")将其转换为stream,使用mapToInt(s->Integers.parseInt(s))collect(Collectors.toList())来实现此目的。类似的东西:

ArrayList<Integer> nextLine = Arrays.stream(inputLine.split(" "))
.mapToInt(s->Integer.parseInt(s))
.collect(Collectors.toList());

但这不起作用,因为mapToInt给了我int而不是Integer s。

我知道如何使用循环来完成它。如果存在的话,我想在单个流操作中实现它。

2 个答案:

答案 0 :(得分:4)

您可以使用Integer#valueOf。请注意,您应该使用hpc<-read.table("hpc.txt", skip = 66637, nrow = 2879, sep =";") hpc$Time<-strptime(hpc$Time, format = "%H:%M:%S") hpc$Date<-as.Date(hpc$Date, format = "%d/%m/%Y") with(hpc,plot(Time,Global.active.power, ylab = "Global.active.power(Killowatts)", xlab = "",type = "l")) 而不是Stream#map

Steam#mapToInt

答案 1 :(得分:3)

mapToInt会返回IntStream,您无法将原始元素累积到ArrayList<T>中,因此您可以使用map操作产生Stream<Integer>,然后您可以将元素累积到ArrayList<T>

也就是说,即使您将.mapToInt(s -> Integer.parseInt(s))更改为.map(s -> Integer.parseInt(s)),您的代码仍然无法编译,因为结果的接收方类型为ArrayList<Integer>类型,而collect在这种特定情况下,终端操作将返回List<Integer>

因此,要解决剩余问题,您可以将接收器类型设置为List<Integer>,或者将接收器类型保留为原样,然后执行.collect(Collectors.toCollection(ArrayList::new));以进行还原操作,从而产生特定的List实现。

已发布的答案的另一个变体是:

ArrayList<Integer> resultSet =
       Pattern.compile(" ")
              .splitAsStream(inputLine)
              .map(Integer::valueOf)
              .collect(Collectors.toCollection(ArrayList::new));