
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
51 lines
1.9 KiB
Plaintext
51 lines
1.9 KiB
Plaintext
== Why is this an issue?
|
|
|
|
In Java 8 ``++Streams++`` were introduced to support chaining of operations over collections in a functional style. The most common way to save a result of such chains is to save them to some collection (usually ``++List++``). To do so there is a terminal method ``++collect++`` that can be used with a library of ``++Collectors++``. The key problem is that ``++.collect(Collectors.toList())++`` actually returns a mutable kind of ``++List++`` while in the majority of cases unmodifiable lists are preferred. In Java 10 a new collector appeared to return an unmodifiable list: ``++toUnmodifiableList()++``. This does the trick but results in verbose code. Since Java 16 there is now a better variant to produce an unmodifiable list directly from a stream: ``++Stream.toList()++``.
|
|
|
|
|
|
This rule raises an issue when "collect" is used to create a list from a stream.
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,java]
|
|
----
|
|
List<String> list1 = Stream.of("A", "B", "C")
|
|
.collect(Collectors.toList()); // Noncompliant
|
|
|
|
List<String> list2 = Stream.of("A", "B", "C")
|
|
.collect(Collectors.toUnmodifiableList()); // Noncompliant
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,java]
|
|
----
|
|
List<String> list1 = Stream.of("A", "B", "C").toList(); // Compliant
|
|
|
|
List<String> list2 = Stream.of("A", "B", "C")
|
|
.collect(Collectors.toList()); // Compliant, the list2 needs to be mutable
|
|
|
|
list2.add("X");
|
|
----
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Replace this usage of 'Stream.collect(Collectors.toList)' or 'Stream.collect(Collectors.toUnmodifiableList())' with 'Stream.toList()'
|
|
|
|
|
|
=== Highlighting
|
|
|
|
invocation of ``++collect(Collectors.toList())++`` or ``++collect(Collectors.toUnmodifiableList())++``
|
|
|
|
|
|
endif::env-github,rspecator-view[]
|