1 33 package net.sf.jga.util; 34 35 import java.util.Collection ; 36 import java.util.Comparator ; 37 import java.util.Iterator ; 38 import net.sf.jga.algorithms.Filter; 39 import net.sf.jga.algorithms.Find; 40 import net.sf.jga.algorithms.Merge; 41 import net.sf.jga.algorithms.Summarize; 42 import net.sf.jga.algorithms.Transform; 43 import net.sf.jga.algorithms.Unique; 44 import net.sf.jga.fn.BinaryFunctor; 45 import net.sf.jga.fn.UnaryFunctor; 46 import net.sf.jga.fn.algorithm.FindMismatch; 47 import net.sf.jga.fn.algorithm.ForEach; 48 import net.sf.jga.fn.arithmetic.Arithmetic; 49 import net.sf.jga.fn.arithmetic.ArithmeticFactory; 50 import net.sf.jga.fn.arithmetic.Minus; 51 import net.sf.jga.fn.arithmetic.Plus; 52 import net.sf.jga.fn.comparison.EqualTo; 53 import net.sf.jga.fn.comparison.Equality; 54 import net.sf.jga.fn.comparison.Less; 55 import net.sf.jga.fn.comparison.NotEqualTo; 56 import net.sf.jga.fn.logical.BinaryNegate; 57 import net.sf.jga.fn.logical.UnaryNegate; 58 59 85 86 public class Iterators { 87 88 92 100 static public <T> FindIterator<T> find (Iterator <? extends T> iterator, T value) { 101 return (FindIterator<T>) Find.find(iterator, value); 102 } 103 104 105 114 static public <T> FindIterator<T> find (Iterator <? extends T> iterator, T value, Equality<T> eq){ 115 return (FindIterator<T>) Find.find(iterator, value, eq); 116 } 117 118 126 static public <T> FindIterator<T> 127 find (Iterator <? extends T> iterator, UnaryFunctor<T,Boolean > fn) 128 { 129 return (FindIterator<T>) Find.find(iterator, fn); 130 } 131 132 136 142 static public <T> long count (Iterator <? extends T> iterator, T value) { 143 return Summarize.count((Iterator <T>) iterator, value); 144 } 145 146 147 153 static public <T> long count(Iterator <? extends T> iterator, Equality<T> eq, T value) { 154 return Summarize.count((Iterator <T>) iterator, eq, value); 155 } 156 157 158 164 static public <T> long count (Iterator <? extends T> iterator, UnaryFunctor<T,Boolean > eq) { 165 return Summarize.count((Iterator <T>) iterator, eq); 166 } 167 168 172 181 static public <T> LookAheadIterator<T> findAdjacent(Iterator <? extends T> iterator) { 182 return (LookAheadIterator<T>) Find.findAdjacent(iterator); 183 } 184 185 186 195 static public <T> LookAheadIterator<T> 196 findAdjacent(Iterator <? extends T> iterator, BinaryFunctor<T,T,Boolean > bf) 197 { 198 return (LookAheadIterator<T>) Find.findAdjacent(iterator, bf); 199 } 200 201 205 212 static public <T> FindIterator<T> 213 findElement(Iterator <? extends T> iterator, Collection <? extends T> desired) 214 { 215 return (FindIterator<T>) Find.findElement(iterator, desired); 216 } 217 218 219 229 static public <T> FindIterator<T> 230 findElement(Iterator <? extends T> i, Collection <? extends T> c, BinaryFunctor<T,T,Boolean > eq) 231 { 232 return (FindIterator<T>) Find.findElement(i, c,eq); 233 } 234 235 239 249 static public <T> LookAheadIterator<T> 250 match(Iterator <? extends T> iterator, Collection <? extends T> pattern) 251 { 252 return (LookAheadIterator<T>) Find.findSequence(iterator, pattern); 253 } 254 255 256 267 static public <T> LookAheadIterator<T> 268 match(Iterator <? extends T> i, Collection <? extends T> pattern, BinaryFunctor<T,T,Boolean > eq) 269 { 270 return (LookAheadIterator<T>) Find.findSequence(i, pattern, eq); 271 } 272 273 274 284 static public <T> LookAheadIterator<T> 285 mismatch(Iterator <? extends T> iterator, Collection <? extends T> pattern) 286 { 287 return (LookAheadIterator<T>) Find.findMismatch(iterator, pattern); 288 } 289 290 291 301 static public <T> LookAheadIterator<T> 302 mismatch(Iterator <? extends T> iterator, Collection <? extends T> pattern, 303 BinaryFunctor<T, T, Boolean > neq) 304 { 305 return (LookAheadIterator<T>) Find.findMismatch(iterator, pattern, neq); 306 } 307 308 312 322 static public <T> LookAheadIterator<T> 323 findRepeated (Iterator <? extends T> iterator, int n, T value) 324 { 325 return (LookAheadIterator<T>) Find.findRepeated(iterator, n, value); 326 } 327 328 329 339 static public <T> LookAheadIterator<T> 340 findRepeated (Iterator <? extends T> iterator, int n, T value, Equality<T> eq) 341 { 342 return (LookAheadIterator<T>) Find.findRepeated(iterator, n, value, eq); 343 } 344 345 346 356 static public <T> LookAheadIterator<T> 357 findRepeated (Iterator <? extends T> iterator, int n, UnaryFunctor<T,Boolean > eq) 358 { 359 return (LookAheadIterator<T>) Find.findRepeated(iterator, n, eq); 360 } 361 362 366 372 static public <T,R> UnaryFunctor<T,R> 373 forEach(Iterator <? extends T> iterator, UnaryFunctor<T,R> fn) 374 { 375 new ForEach<T,R>(fn).fn(iterator); 376 return fn; 377 } 378 379 380 384 389 static public <T extends Comparable <? super T>> boolean 390 equal(Iterator <? extends T> iterator1, Iterator <? extends T> iterator2) 391 { 392 return equal(iterator1, iterator2, new ComparableComparator<T>()); 393 } 394 395 396 401 static public <T> boolean 402 equal(Iterator <? extends T> iterator1, Iterator <? extends T> iterator2, Comparator <T> comp) 403 { 404 IteratorComparator<T> comp2 = new IteratorComparator<T>(comp); 405 EqualTo<Iterator <? extends T>> eq = 406 new EqualTo<Iterator <? extends T>>(comp2); 407 return eq.p(iterator1, iterator2); 408 } 409 410 411 416 static public <T> boolean 417 equal(Iterator <? extends T> iter1, Iterator <? extends T> iter2, BinaryFunctor<T,T,Boolean > eq) 418 { 419 while (iter1.hasNext() && iter2.hasNext()) { 420 if (!eq.fn(iter1.next(),iter2.next()).booleanValue()) 421 return false; 422 } 423 424 return iter1.hasNext() == iter2.hasNext(); 425 } 426 427 428 432 438 static public <T extends Comparable <? super T>> boolean 439 lessThan(Iterator <? extends T> iter1, Iterator <? extends T> iter2) 440 { 441 Comparator <T> comp1 = new ComparableComparator<T>(); 442 IteratorComparator<T> comp2 = new IteratorComparator<T>(comp1); 443 return new Less<Iterator <? extends T>>(comp2).p(iter1, iter2); 444 } 445 446 447 452 static public <T> boolean 453 lessThan(Iterator <? extends T> iter1, Iterator <? extends T> iter2, Comparator <T> comp) 454 { 455 IteratorComparator<T> comp2 = new IteratorComparator<T>(comp); 456 return new Less<Iterator <? extends T>>(comp2).p(iter1, iter2); 457 } 458 459 460 467 static public <T> boolean 468 lessThan(Iterator <? extends T> i1, Iterator <? extends T> i2, final BinaryFunctor<T,T,Boolean > lt) 469 { 470 IteratorComparator<T> comp = 471 new IteratorComparator<T>(new Comparator <T>() { 472 public int compare(T x,T y) { 473 return lt.fn(x,y).booleanValue() ? -1 : 474 lt.fn(y,x).booleanValue() ? 1 : 0; 475 } 476 }); 477 478 return new Less<Iterator <? extends T>>(comp).p(i1, i2); 479 } 480 481 482 486 492 static public <T extends Comparable <? super T>> T 493 minimumValue(Iterator <? extends T> iterator) 494 { 495 return Summarize.min(iterator); 496 } 497 498 499 504 static public <T> T minimumValue(Iterator <? extends T> iterator, Comparator <T> comp) { 505 return Summarize.min(iterator, comp); 506 } 507 508 509 516 static public <T> T minimumValue(Iterator <? extends T> iterator, BinaryFunctor<T,T,T> bf) { 517 return Summarize.min((Iterator <T>) iterator, bf); 518 } 519 520 521 527 static public <T extends Comparable <? super T>> T 528 maximumValue(Iterator <? extends T> iterator) 529 { 530 return Summarize.max(iterator); 531 } 532 533 534 539 static public <T> T maximumValue(Iterator <? extends T> iterator, Comparator <T> comp) { 540 return Summarize.max(iterator, comp); 541 } 542 543 544 551 static public <T> T maximumValue(Iterator <? extends T> iterator, BinaryFunctor<T,T,T> bf) { 552 return Summarize.max((Iterator <T>)iterator,bf); 553 } 554 555 559 565 static public <T extends Number > T accumulate(Class <T> numtype, Iterator <T> iterator) { 566 return Summarize.sum(numtype, iterator); 567 } 568 569 570 581 static public <T extends Number > T 582 accumulate(Class <T> numtype, Iterator <T> iterator, BinaryFunctor<T,T,T> bf) 583 { 584 Arithmetic<T> _math = ArithmeticFactory.getArithmetic(numtype); 585 if (_math == null) { 586 throw new IllegalArgumentException (); 587 } 588 589 return Summarize.accumulate(iterator, _math.zero(), bf); 590 } 591 592 593 603 static public <T> T accumulate(Iterator <T> iterator, T initial, BinaryFunctor<T,T,T> bf) 604 { 605 return Summarize.accumulate(iterator, initial, bf); 606 } 607 608 612 621 static public <T,R> TransformIterator<T,R> 622 transform(Iterator <? extends T> iter, UnaryFunctor<T,R> uf) 623 { 624 return (TransformIterator<T,R>) Transform.transform(iter, uf); 625 } 626 627 628 639 static public <T1,T2,R> TransformBinaryIterator<T1,T2,R> 640 transform(Iterator <? extends T1> i1, Iterator <? extends T2> i2, BinaryFunctor<T1,T2,R> bf) 641 { 642 return (TransformBinaryIterator<T1,T2,R>) Transform.transform(i1, i2, bf); 643 } 644 645 649 654 static public <T> Iterator <T> 655 replaceAll(Iterator <? extends T> iter, UnaryFunctor<T,Boolean > test, T value) 656 { 657 return Transform.replace((Iterator <T>) iter, test, value); 658 } 659 660 661 665 672 static public <T> FilterIterator<T> 673 removeAll (Iterator <? extends T> iterator, T value) 674 { 675 return (FilterIterator<T>) Filter.remove(iterator, value); 676 } 677 678 679 687 static public <T> FilterIterator<T> 688 removeAll (Iterator <? extends T> iterator, T value, Equality<T> eq) 689 { 690 return (FilterIterator<T>) Filter.remove(iterator, value, eq); 691 } 692 693 694 702 static public <T> FilterIterator<T> 703 removeAll (Iterator <? extends T> iterator, UnaryFunctor<T,Boolean > eq) 704 { 705 return (FilterIterator<T>) Filter.remove(iterator, eq); 706 } 707 708 712 719 static public <T> UniqueIterator<T> unique(Iterator <? extends T> iterator) { 720 return (UniqueIterator<T>) Unique.unique(iterator); 721 } 722 723 724 732 static public <T> UniqueIterator<T> 733 unique(Iterator <? extends T> iterator, BinaryFunctor<T,T,Boolean > eq) 734 { 735 return (UniqueIterator<T>) Unique.unique(iterator, eq); 736 } 737 738 742 750 static public <T extends Comparable <? super T>> MergeIterator<T> 751 merge (Iterator <? extends T> iter1, Iterator <? extends T> iter2) 752 { 753 return (MergeIterator<T>) Merge.merge(iter1, iter2); 754 } 755 756 757 765 static public <T> MergeIterator<T> 766 merge (Iterator <? extends T> iter1, Iterator <? extends T> iter2, Comparator <T> comp) 767 { 768 return (MergeIterator<T>) Merge.merge(iter1, iter2, comp); 769 } 770 771 775 781 782 static public <T extends Number > TransformAdjacentIterator<T,T> 783 adjacentDiff(Class <T> type, Iterator <? extends T> iter) 784 { 785 return (TransformAdjacentIterator<T,T>) Transform.transform(iter, new Minus<T>(type)); 786 } 787 } 788 | Popular Tags |