我有一个列表,例如// KEEP METHODS - put your custom methods here
...
// KEEP METHODS END
,我想创建另一个生成
[0,12,16,23,66]
的列表。
我可以使用简单的for循环编写它,但我想找到使用功能结构来完成它的最佳方法。我可以通过使用["0-12","12-16","16-23","23-66"]
或reduce
来破解我的方式但是感觉不对,因为它会推动到函数范围之外的列表。有更好的方法吗?
我正在使用Java 8,但我对这样做的想法持开放态度,而不是如何用一种语言完成。
答案 0 :(得分:5)
使用StreamEx库可以轻松完成此类操作。它提供了pairMap
方法,可以对来自Stream的两个连续项执行操作:
public static void main(String[] args) {
List<Integer> list = Arrays.asList(0,12,16,23,66);
List<String> 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) {
List<Integer> list = Arrays.asList(0,12,16,23,66);
List<String> result = IntStream.range(0, list.size() - 1)
.mapToObj(i -> list.get(i) + "-" + list.get(i+1))
.collect(Collectors.toList());
System.out.println(result);
}