As mentioned by @shmosel already replacing the lambda with a method reference will lead to ambiguity as there's two toString method of the signarure:
because the call to Stream.iterate(0, i -> i + 1) returns a Stream<Integer> when you call map with the method reference Integer::toString the compiler is not sure whether you meant to do Integer.toString(i) or i.toString() hence the compilation error.
So here are other options to what's already been provided:
instead of Stream.iterate you can use IntStream.iterate then call mapToObj:
IntStream.iterate(0, i -> i + 1) // IntStream
.limit(100) // IntStream
.mapToObj(Integer::toString); // i1 -> Integer.toString(i1)
Another thing suggested by intelliJ is that you can actually do:
Stream.iterate(0, i -> i + 1) // Stream<Integer>
.limit(100) // Stream<Integer>
.map(Object::toString); // integer -> integer.toString()
where Object::toString is equivalent to the lambda integer -> integer.toString()
on another note, it's interesting that Sonar is suggesting to replace the lambda with a method reference in the code you've shown. intelliJ IDEA was smart enough not to suggest it.