Java8 stream 怎么反转列表,刚学,求指点

image.png
有没有办法在 stream 上反转
一道leetcode题来着,我想用 stream 看看能不能一行代码完成他的。

阅读 13.2k
3 个回答

其实可以

final List<Integer> list = Stream.of(1, 2, 3, 4)
        .sorted((pre, next) -> -1)
        .collect(Collectors.toList());
System.out.println(list);

完成反转,上面的都过于复杂了

可以翻转列表但是很麻烦,其实你这个问题直接反向遍历数组就完事了,甚至不需要用stream

public class Sf1010000041051104 {

    public static void main(String[] args) {
        ArrayList<String> collect = Stream.of("1", "2", "3").collect(Collector.of(
                ArrayList::new,
                (objects, s) -> {
                    objects.add(0, s);
                },
                (objects, objects2) -> {
                    objects.addAll(objects2);
                    return objects;
                }));

        System.out.println(collect);
    }

    public static List<String> test(String str) {
        String[] ss = str.split(" ");
        ArrayList<String> result = new ArrayList<>(ss.length);
        for (int i = ss.length - 1; i >= 0; i--) {
            String s = ss[i];
            if (!s.isEmpty()) {
                result.add(s);
            }
        }
        return result;
    }
}

使用java工具类java.util.Collections中的自带方法Collections.reverse()
以下是java.util.Collections.reverse()方法的声明

public static void reverse(List<?> list)

1
看到参数是一个list,而并非是数组int[],所以需要先新建一个ArrayList存放原数组originArray的元素

   public void arrayReverse1() {
        reverseArray = new int[length];
        ArrayList arraylist = new ArrayList();
        for (int i = 0; i < length; i++) {
            arraylist.add(originArray[i]); //存放元素
        }
        Collections.reverse(arraylist); //使用方法进行逆序
        //完成逆序后,可以保存到新数组reverseArray
        for (int i = 0; i < length; i++) {
            reverseArray[i] = (int) arraylist.get(i);
        }
    }
 

来源 https://www.cnblogs.com/it-ts...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题