Hi Tagir,

"Let a thousand flowers bloom” :-) It’s great you can do this.

For the moment i am ok with waiting until we have better mechanisms in the 
language platform to do even better [*], then we can gather use-cases based on 
developer experience such as yours.

Paul.

[*] FWIW we experimented a couple of times with a Map/BiStream abstraction, and 
each time decided to back away.


> On 7 Nov 2015, at 05:49, Tagir F. Valeev <amae...@gmail.com> wrote:
> PS> In other cases e.g. about preceding elements, a
> PS> history-based wrapping spliterator could work (IIRC Jose Paumard
> PS> has presented such examples), but we are currently lacking an SPI
> PS> to plug-in operations, so one needs to directly use the 
> Stream.spliterator escape.
> 
> Actually I wrote a spliterator in my StreamEx library which allows to
> process pairs of input elements (along with primitive
> specializations), of course using Stream.spliterator escape (which is
> not that bad if you avoid tryAdvance call):
> https://github.com/amaembo/streamex/blob/master/src/main/java/javax/util/streamex/PairSpliterator.java
> Despite it's not lock-free, it greatly parallelizes and has good
> overall performance, so I'm somewhat proud of it. It allows to solve
> many interesting problems.
> 
> Pairwise differences:
> int[] diff = IntStreamEx.of(intArray).pairMap((a, b) -> b-a).toArray();
> 
> Skip last stream element:
> Stream<T> stream = StreamEx.of(input).pairMap((a, b) -> a);
> 
> Check if input is sorted:
> StreamEx.of(input).pairMap(Comparable::compareTo).allMatch(r -> r <= 0);
> 
> Find first misplaced element:
> StreamEx.of(input).pairMap((a, b) -> a.compareTo(b) > 0 ? b : 
> null).nonNull().findFirst();
> 
> More complex example: sort word list and add header before each letter:
> StreamEx.of(words).sorted()
>    .prepend(" ") // Stream.concat(Stream.of(" "), this)
>    .pairMap((a, b) -> a.charAt(0) == b.charAt(0) ? Stream.of(b) :
>        Stream.of("Words starting with letter "+b.substring(0,1), b))
>    .flatMap(Function.identity())
>    .forEach(System.out::println);
> 
> And so on. It would be great to see such feature in JDK as well!
> 


Reply via email to