如何用Java 8流替换该方法?

时间:2018-06-27 12:19:06

标签: java java-8

这可能是一个显而易见的问题,但我正在考虑如何用Java 8流替换下面的方法。

getline_universal()

我是Java的新手,所以Java 8对我来说就像是一个未开发的世界。

谢谢!

6 个答案:

答案 0 :(得分:6)

您只需要Collections.nCopies

private static String assembleString(int numberOfCharacters, char character) {
    return String.join("",
            Collections.nCopies(numberOfCharacters, String.valueOf(character))
    );
}

答案 1 :(得分:2)

您可以使用Stream.generate

return Stream.generate(() -> String.valueOf(character))
              .limit(numberOfCharacters)
              .collect(Collectors.joining());

IntStream.rangeClosed

return IntStream.rangeClosed(1, numberOfCharacters)
                .mapToObj(n -> String.valueOf(character))
                .collect(Collectors.joining());

答案 2 :(得分:2)

这足够了。

&

编辑:

按照Holger的建议,这将更加实用,更加清洁。

IntStream.range(0, numberOfCharacters)  
  .mapToObj(value -> character)
  .forEach(stringBuilder::append);

答案 3 :(得分:1)

使用IntStream

private String assembleString(int numberOfCharacters, char character) {
        return IntStream.range(0, numberOfCharacters)
               .mapToObj(i -> String.valueOf(character)).collect(Collectors.joining());
    }

答案 4 :(得分:1)

在Java 11+中,您还可以使用String::repeat

return String.repeat(Character.toString(character), numberOfCharacters);

或者您可以“窃取”其实现:

char[] repeated = new char[numberOfCharacters];
Arrays.fill(repeated, character);
return new String(repeated);

答案 5 :(得分:1)

仅出于“完整性”考虑,没有明显的循环或流:

private String assembleString(int numberOfCharacters, char character) {
    return new String(new char[numberOfCharacters]).replace('\0', character);
}

操作方法:创建一个大小为'numberOfCharacters'的新char数组,该数组将以'null'字符初始化。从此数组构造一个String,然后将所有出现的null字符替换为所需的那个。