以功能方式从列表创建配对列表

时间:2015-12-17 10:31:50

标签: java functional-programming java-8 java-stream

我有一个列表,例如// 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,但我对这样做的想法持开放态度,而不是如何用一种语言完成。

1 个答案:

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