----- Mail original ----- > De: "Stuart Marks" <sma...@openjdk.java.net> > À: "core-libs-dev" <core-libs-dev@openjdk.java.net> > Envoyé: Mardi 24 Novembre 2020 08:10:14 > Objet: Re: RFR: 8180352: Add Stream.toList() method [v4]
>> This change introduces a new terminal operation on Stream. This looks like a >> convenience method for Stream.collect(Collectors.toList()) or >> Stream.collect(Collectors.toUnmodifiableList()), but it's not. Having this >> method directly on Stream enables it to do what can't easily by done by a >> Collector. In particular, it allows the stream to deposit results directly >> into >> a destination array (even in parallel) and have this array be wrapped in an >> unmodifiable List without copying. >> >> In the past we've kept most things from the Collections Framework as >> implementations of Collector, not directly on Stream, whereas only >> fundamental >> things (like toArray) appear directly on Stream. This is true of most >> Collections, but it does seem that List is special. It can be a thin wrapper >> around an array; it can handle generics better than arrays; and unlike an >> array, it can be made unmodifiable (shallowly immutable); and it can be >> value-based. See John Rose's comments in the bug report: >> >> https://bugs.openjdk.java.net/browse/JDK-8180352?focusedCommentId=14133065&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14133065 >> >> This operation is null-tolerant, which matches the rest of Streams. This >> isn't >> specified, though; a general statement about null handling in Streams is >> probably warranted at some point. >> >> Finally, this method is indeed quite convenient (if the caller can deal with >> what this operation returns), as collecting into a List is the most common >> stream terminal operation. > > Stuart Marks has updated the pull request incrementally with one additional > commit since the last revision: > > Add comment and assert regarding array class; use switch expression. > > ------------- Hi Stuart, This version is Ok for me. I still think that using a null friendly List is a mistake, but you, Brian and John all think it's not an issue, so let's go with it. > > Changes: > - all: https://git.openjdk.java.net/jdk/pull/1026/files > - new: https://git.openjdk.java.net/jdk/pull/1026/files/15beacd2..bd890ae5 > > Webrevs: > - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=1026&range=03 > - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=1026&range=02-03 > > Stats: 20 lines in 1 file changed: 4 ins; 4 del; 12 mod > Patch: https://git.openjdk.java.net/jdk/pull/1026.diff > Fetch: git fetch https://git.openjdk.java.net/jdk pull/1026/head:pull/1026 > > PR: https://git.openjdk.java.net/jdk/pull/1026