public int length(){ return string.size(); } public String toString(){
@Override public int size() { return bucket.size(); }
@Override default LazySeq<T> takeRight(int num) { if(num>size()) return this; return (LazySeq<T>) ImmutableList.super.takeRight(num); }
private Tree(T head, LazySeq<Tree<T>> subForest) { this.head = head; this.subForest = subForest; this.size = Memoize.memoizeSupplier(()->1+subForest.size()); }
@Override public int size() { return ref.get().size(); }
default Maybe<Long> lastIndexOfSlice(Iterable<? extends T> slice){ LazySeq<? extends T> ls = LazySeq.fromIterable(slice); Predicate<? super Seq<? super T>> pred = in -> in.equals(ls); return stream().sliding(ls.size(),1).lastIndexOf(pred); }
default Maybe<Long> indexOfSlice(Iterable<? extends T> slice){ LazySeq<? extends T> ls = LazySeq.fromIterable(slice); Predicate<? super Seq<? super T>> pred = in -> in.equals(ls); return stream().sliding(ls.size(),1).indexOf(pred); } default Maybe<Long> lastIndexOfSlice(Iterable<? extends T> slice){
@Test public void lazySeq() throws Exception { assertThat(diet.lazySeq().size(),equalTo(18)); }
@Test public void scanRightLazy(){ called=0; LazySeq<Integer> ls = LazySeq.of(1, 2, 3) .peek(a -> { called++; System.out.println(a); }) .scanRight(0, (a, b) -> a + b); assertThat(called,equalTo(0)); ls.size(); assertThat(called,equalTo(3)); }
@Test public void fromIterableSize(){ assertThat(LazySeq.fromIterable(Seq.of(1,2,3)).size(),equalTo(3)); } @Test
@Override @SuppressWarnings({ "unchecked", "rawtypes" }) public Tuple2<Option<T>, ReactiveSeq<T>> splitAtHead() { final Tuple2<ReactiveSeq<T>, ReactiveSeq<T>> Tuple2 = splitAt(1); return Tuple.tuple( Tuple2._1().to().option() .flatMap(l -> l.size() > 0 ? l.get(0) : Option.none()), Tuple2._2()); }
@Override @SuppressWarnings({"unchecked", "rawtypes"}) public Tuple2<Option<T>, ReactiveSeq<T>> splitAtHead() { final Tuple2<ReactiveSeq<T>, ReactiveSeq<T>> Tuple2 = splitAt(1); return Tuple.tuple( Tuple2._1().to().option() .flatMap(l -> { return l.size() > 0 ? l.get(0) : Option.none(); }), Tuple2._2()); }
@Test public void skipLimitDuplicateLimitSkip() { Tuple3<ReactiveSeq<Integer>, ReactiveSeq<Integer>,ReactiveSeq<Integer>> dup = of(1, 2, 3).triplicate(); Option<Integer> head1 = dup._1().limit(1).to().option().flatMap(l -> { return l.size() > 0 ? l.get(0) : Option.<Integer>none(); }); Tuple3<ReactiveSeq<Integer>, ReactiveSeq<Integer>,ReactiveSeq<Integer>> dup2 = dup._2().skip(1).triplicate(); Option<Integer> head2 = dup2._1().limit(1).to().option().flatMap(l -> { return l.size() > 0 ? l.get(0) : Option.<Integer>none(); }); assertThat(dup2._2().skip(1).toList(),equalTo(Arrays.asList(3))); assertThat(of(1, 2, 3).duplicate()._1().skip(1).duplicate()._1().skip(1).toList(), equalTo(Arrays.asList(3))); }
@Test public void dropLimitDuplicateLimitSkip() { Tuple3<ReactiveSeq<Integer>, ReactiveSeq<Integer>, ReactiveSeq<Integer>> dup = of(1, 2, 3).triplicate(); Option<Integer> head1 = dup._1().take(1).to().option().flatMap(l -> { return l.size() > 0 ? l.get(0) : Option.<Integer>none(); }); Tuple3<ReactiveSeq<Integer>, ReactiveSeq<Integer>, ReactiveSeq<Integer>> dup2 = dup._2().drop(1).triplicate(); Option<Integer> head2 = dup2._1().take(1).to().option().flatMap(l -> { return l.size() > 0 ? l.get(0) : Option.<Integer>none(); }); assertThat(dup2._2().drop(1).toList(), equalTo(Arrays.asList(3))); assertThat(of(1, 2, 3).duplicate()._1().drop(1).duplicate()._1().drop(1).toList(), equalTo(Arrays.asList(3))); }
@Test public void skipLimitDuplicateLimitSkip() { Tuple2<ReactiveSeq<Integer>, ReactiveSeq<Integer>> dup = of(1, 2, 3).duplicate(); Option<Integer> head1 = dup._1().limit(1).to().option().flatMap(l -> { return l.size() > 0 ? l.get(0) : Option.<Integer>none(); }); Tuple2<ReactiveSeq<Integer>, ReactiveSeq<Integer>> dup2 = dup._2().skip(1).duplicate(); Option<Integer> head2 = dup2._1().limit(1).to().option().flatMap(l -> { return l.size() > 0 ? l.get(0) : Option.<Integer>none(); }); assertThat(dup2._2().skip(1).toList(),equalTo(Arrays.asList(3))); assertThat(of(1, 2, 3).duplicate()._1().skip(1).duplicate()._1().skip(1).toList(), equalTo(Arrays.asList(3))); } @Test
@Test public void skipLimitTriplicateLimitSkip() { Tuple3<ReactiveSeq<Integer>, ReactiveSeq<Integer>,ReactiveSeq<Integer>> dup = of(1, 2, 3).triplicate(); Option<Integer> head1 = dup._1().limit(1).to().option().flatMap(l -> { return l.size() > 0 ? l.get(0) : Option.<Integer>none(); }); Tuple3<ReactiveSeq<Integer>, ReactiveSeq<Integer>,ReactiveSeq<Integer>> dup2 = dup._2().skip(1).triplicate(); Option<Integer> head2 = dup2._1().limit(1).to().option().flatMap(l -> { return l.size() > 0 ? l.get(0) : Option.<Integer>none(); }); assertThat(dup2._2().skip(1).toList(),equalTo(Arrays.asList(3))); assertThat(of(1, 2, 3).duplicate()._1().skip(1).duplicate()._1().skip(1).toList(), equalTo(Arrays.asList(3))); } @Test
@Test public void skipLimitQuadruplicateLimitSkip() { Tuple4<ReactiveSeq<Integer>, ReactiveSeq<Integer>,ReactiveSeq<Integer>,ReactiveSeq<Integer>> dup = of(1, 2, 3).quadruplicate(); Option<Integer> head1 = dup._1().limit(1).to().option().flatMap(l -> { return l.size() > 0 ? l.get(0) : Option.<Integer>none(); }); Tuple4<ReactiveSeq<Integer>, ReactiveSeq<Integer>,ReactiveSeq<Integer>,ReactiveSeq<Integer>> dup2 = dup._2().skip(1).quadruplicate(); Option<Integer> head2 = dup2._1().limit(1).to().option().flatMap(l -> { return l.size() > 0 ? l.get(0) : Option.<Integer>none(); }); assertThat(dup2._2().skip(1).toList(),equalTo(Arrays.asList(3))); assertThat(of(1, 2, 3).duplicate()._1().skip(1).duplicate()._1().skip(1).toList(), equalTo(Arrays.asList(3))); }
@Test public void splitAtHeadBug(){ final Tuple2<ReactiveSeq<Integer>, ReactiveSeq<Integer>> Tuple2 = ReactiveSeq.of(1).splitAt(1); Option<LazySeq<Integer>> a = Tuple2._1().to().option(); Option<Option<Integer>> x = a .flatMap(l -> l.size() > 0 ? Option.of(l.get(0)) : Option.none()); assertEquals(Option.of(1), ReactiveSeq.of(1).splitAtHead()._1()); } @Test
@Test public void emptyConvert(){ assertFalse(empty().option().isPresent()); assertFalse(empty().seq().size()>0); assertFalse(empty().lazySeq().size()>0); assertFalse(empty().vector().size()>0); assertFalse(empty().bankersQueue().size()>0); assertFalse(empty().hashSet().size()>0); assertFalse(empty().treeSet((Comparator)Comparator.naturalOrder()).size()>0); assertFalse(empty().hashMap(t->t,t->t).size()>0); } @Test
@Test public void presentConvert(){ assertTrue(of(1).option().isPresent()); assertTrue(of(1).seq().size()>0); assertTrue(of(1).lazySeq().size()>0); assertTrue(of(1).bankersQueue().size()>0); assertTrue(of(1).vector().size()>0); assertTrue(of(1).hashSet().size()>0); assertTrue(of(1).treeSet(Comparator.naturalOrder()).size()>0); assertTrue(of(1).bag().size()>0); assertTrue(of(1).hashMap(t->t, t->t).size()>0); }