Reputation: 93
It can be an obvious question but I am thinking how to replace the method below with java 8 streams.
private String assembleString(int numberOfCharacters, char character) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < numberOfCharacters; i++) {
stringBuilder.append(character);
}
return stringBuilder.toString();
}
I am new in Java, so java 8 it is like an unexplored world for me.
Thank you!
Upvotes: 8
Views: 1063
Reputation: 27048
This should suffice.
IntStream.range(0, numberOfCharacters)
.mapToObj(value -> character)
.forEach(stringBuilder::append);
EDIT:
Taking Holger's suggestion, this would be even more functional and cleaner.
IntStream.range(0, numberOfCharacters)
.map(value -> character) .collect(StringBuilder::new,
StringBuilder::appendCodePoint, StringBuilder::append);
Upvotes: 2
Reputation: 1733
Just for "completeness", without apparent loops or Streams:
private String assembleString(int numberOfCharacters, char character) {
return new String(new char[numberOfCharacters]).replace('\0', character);
}
How: Creates a new char array of size 'numberOfCharacters', which will be initialised with 'null' characters. Construct a String from this array, then replace all occurrences of the null character with the desired one.
Upvotes: 1
Reputation: 328608
With Java 11+, you could also use String::repeat
:
return String.repeat(Character.toString(character), numberOfCharacters);
Or you could "steal" their implementation:
char[] repeated = new char[numberOfCharacters];
Arrays.fill(repeated, character);
return new String(repeated);
Upvotes: 1
Reputation: 59978
All you need is just Collections.nCopies
private static String assembleString(int numberOfCharacters, char character) {
return String.join("",
Collections.nCopies(numberOfCharacters, String.valueOf(character))
);
}
Upvotes: 6
Reputation: 2751
Use IntStream
:
private String assembleString(int numberOfCharacters, char character) {
return IntStream.range(0, numberOfCharacters)
.mapToObj(i -> String.valueOf(character)).collect(Collectors.joining());
}
Upvotes: 1
Reputation: 56433
You can use Stream.generate
:
return Stream.generate(() -> String.valueOf(character))
.limit(numberOfCharacters)
.collect(Collectors.joining());
or IntStream.rangeClosed
:
return IntStream.rangeClosed(1, numberOfCharacters)
.mapToObj(n -> String.valueOf(character))
.collect(Collectors.joining());
Upvotes: 2