当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《以功能方式从列表创建配对列表》经验,为你挑选了1个好方法。

我有一个列表,例如[0,12,16,23,66],我想创建另一个生成的列表
["0-12","12-16","16-23","23-66"].

我可以使用一个简单的for循环来编写它,但我想找到使用函数结构来完成它的最佳方法.
我可以通过使用a reduce或a 来破解我的方式,foldLeft但是感觉不对,因为它会推动到函数范围之外的列表.有一个更好的方法吗?

我正在使用Java 8,但我对这样做的想法持开放态度,而不是如何用一种语言完成它.



1> Tunaki..:

使用StreamEx库可以轻松完成此类操作.它提供了一种pairMap方法,可以对Stream中的两个连续项执行操作:

public static void main(String[] args) {
    List list = 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) {
    List list = 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);
}


在列表具有子线性查找的假设下,第二解决方案是有效的.第一个解决方案以及折叠也适用于链接列表.
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有