Path: csiph.com!aioe.org!.POSTED!not-for-mail From: =?UTF-8?Q?Arne_Vajh=c3=b8j?= Newsgroups: comp.lang.java.programmer Subject: Re: stream concat distinct indeterministic Date: Mon, 15 Feb 2016 21:45:17 -0500 Organization: Aioe.org NNTP Server Lines: 53 Message-ID: References: <6e75cf37-61c1-4ab8-af9b-851fc280244d@googlegroups.com> NNTP-Posting-Host: ANasIS7Js9OyLQwgloeBLQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 X-Notice: Filtered by postfilter v. 0.8.2 Xref: csiph.com comp.lang.java.programmer:33835 On 2/15/2016 4:13 PM, Eric Sosman wrote: > On 2/15/2016 3:54 PM, Philipp Kraus wrote: >> Am Montag, 15. Februar 2016 17:30:23 UTC+1 schrieb Arne Vajhøj: >>> On 2/15/2016 11:08 AM, Philipp Kraus wrote: >>>> I run Stream.concat to concat two streams. These two streams are >>>> "stream" and use a flatMap call. After the concat I run distinct() to >>>> create an unique stream of elements, but I get an indeterministic >>>> behaviour of my concated stream, so my question is how can I create a >>>> concated and distinct stream? >>> >>> Docs for distinct says: >>> >>> "For ordered streams, the selection of distinct elements is stable (for >>> duplicated elements, the element appearing first in the encounter order >>> is preserved.) For unordered streams, no stability guarantees are made." >>> >>> so I would guess that you would need to do .sorted().distinct() instead >>> of just .distinct(). >> >> Thanks, this seems to be working, I have added a compareTo (overload) >> and run sorted() before distinct(). > > Let's review for a moment. From bits and pieces of several posts, > it seems you began with > > Stream.concat(str1, str2).distinct().count(); > > ... and reported that the same str1/2 produced different counts in > different runs. Now you've changed to > > Stream.concat(str1, str2).sorted().distinct().count(); > > ... which shouldn't ("shouldn't") change anything, yet you now report > that everything appears to be working. > > Except, of course, that there's no obvious reason why the original > pipeline would misbehave, and no obvious reason why sorted() should make > any difference (there are exactly as many elements in ACDB as in ABCD). > So I *strongly* encourage you not to let the matter rest, but to look > deeper and see what's really going on. > > You may have uncovered a serious bug in the streams framework -- > or you may have made a slip-up elsewhere. The former is possible, but > to me the latter seems far more likely. The post I replied to did not talk about different count but about "indeterministic behaviour". .sorted() should not impact .count() at all, but I thought it may help on .distinct() and "indeterministic behaviour". Arne