如何使用流api进行可重复的操作

Suu*_*ule 5 java java-8 java-stream

我想知道如何在Stream Api的帮助下缩短我的代码.假设我有这样的方法:

public static void createFile( String directoryPath, String fileName )
Run Code Online (Sandbox Code Playgroud)

我想用相同的参数调用这个方法5次.例如

        for (int i = 0; i < 5; i++) {
            Utils.createFile(getDirectoryLocation(), "test.txt");
        }
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

IntStream.rangeClosed(1, 5).forEach(Utils::someMethod);
Run Code Online (Sandbox Code Playgroud)

但在这里,我将一个整数值传递给方法.任何人都可以给我一些提示或答案?

Eug*_*ene 7

Streams在这里并不是真正有用,一个简单的循环会更好IMO.但如果你真的想,你可以通过lambda(忽略x ...)来编写它:

IntStream.rangeClosed(1, 5).forEach(x -> Utils.createFile(getDirectoryLocation(), "test.txt"));
Run Code Online (Sandbox Code Playgroud)

我猜一个更丑陋的方式可能是:

Stream.generate(() -> "test.txt")
            .limit(5)
            .forEach(x -> Utils.createFile(getDirectoryLocation(), x));
Run Code Online (Sandbox Code Playgroud)

或更好:

Collections.nCopies(5, "test.txt")
           .forEach(x -> Utils.createFile(getDirectoryLocation(), x));
Run Code Online (Sandbox Code Playgroud)

  • 只是选择传统的偏好`范围(0,5)`...现在我想知道*"丑陋"*意味着什么?可读性(当然恕我直言)或表现? (2认同)
  • @nullpointer我真的进入可读性的事情是的,一个简单的循环会更具可读性.自从OP为了学习目的而在评论中说,我才展示它... (2认同)
  • @nullpointer我认为`range(0,5)`也是优选的,特别是因为OP的循环确实如此(`for(int i = 0; i <5; ...`).但是为什么地球上有人想要创建相同的文件五次? (2认同)