我有一个列表,例如[0,12,16,23,66]
,我想创建另一个生成的列表["0-12","12-16","16-23","23-66"]
.
我可以使用一个简单的for循环来编写它,但我想找到使用函数结构来完成它的最佳方法.
我可以通过使用a reduce
或a 来破解我的方式,foldLeft
但是感觉不对,因为它会推动到函数范围之外的列表.有一个更好的方法吗?
我正在使用Java 8,但我对这样做的想法持开放态度,而不是如何用一种语言完成它.
使用StreamEx库可以轻松完成此类操作.它提供了一种pairMap
方法,可以对Stream中的两个连续项执行操作:
public static void main(String[] args) { Listlist = Arrays.asList(0,12,16,23,66); List result = StreamEx.of(list).pairMap((i1, i2) -> i1 + "-" + i2).toList(); System.out.println(result); // prints [0-12, 12-16, 16-23, 23-66] }
如果您不想使用此库,您仍然可以使用IntStream
输入列表的索引通过Stream API执行此操作.
public static void main(String[] args) { Listlist = Arrays.asList(0,12,16,23,66); List result = IntStream.range(0, list.size() - 1) .mapToObj(i -> list.get(i) + "-" + list.get(i+1)) .collect(Collectors.toList()); System.out.println(result); }