@@ -413,6 +413,13 @@ public static <T> Observable<T> create(Func1<Observer<T>, Subscription> func) {
413
413
return new Observable <T >(func );
414
414
}
415
415
416
+ /*
417
+ * Private version that creates a 'trusted' Observable to allow performance optimizations.
418
+ */
419
+ private static <T > Observable <T > _create (Func1 <Observer <T >, Subscription > func ) {
420
+ return new Observable <T >(func , true );
421
+ }
422
+
416
423
/**
417
424
* Creates an Observable that will execute the given function when a {@link Observer} subscribes to it.
418
425
* <p>
@@ -484,7 +491,7 @@ public static <T> Observable<T> error(Exception exception) {
484
491
* @return an Observable that emits only those items in the original Observable that the filter evaluates as true
485
492
*/
486
493
public static <T > Observable <T > filter (Observable <T > that , Func1 <T , Boolean > predicate ) {
487
- return create (OperationFilter .filter (that , predicate ));
494
+ return _create (OperationFilter .filter (that , predicate ));
488
495
}
489
496
490
497
/**
@@ -577,7 +584,7 @@ public static <T> Observable<T> just(T value) {
577
584
* by the source Observable
578
585
*/
579
586
public static <T > Observable <T > last (final Observable <T > that ) {
580
- return create (OperationLast .last (that ));
587
+ return _create (OperationLast .last (that ));
581
588
}
582
589
583
590
/**
@@ -598,7 +605,7 @@ public static <T> Observable<T> last(final Observable<T> that) {
598
605
* in the sequence emitted by the source Observable
599
606
*/
600
607
public static <T , R > Observable <R > map (Observable <T > sequence , Func1 <T , R > func ) {
601
- return create (OperationMap .map (sequence , func ));
608
+ return _create (OperationMap .map (sequence , func ));
602
609
}
603
610
604
611
/**
@@ -654,7 +661,7 @@ public R call(T t1) {
654
661
* the Observables obtained from this transformation
655
662
*/
656
663
public static <T , R > Observable <R > mapMany (Observable <T > sequence , Func1 <T , Observable <R >> func ) {
657
- return create (OperationMap .mapMany (sequence , func ));
664
+ return _create (OperationMap .mapMany (sequence , func ));
658
665
}
659
666
660
667
/**
@@ -703,7 +710,7 @@ public R call(T t1) {
703
710
* @see http://msdn.microsoft.com/en-us/library/hh229453(v=VS.103).aspx
704
711
*/
705
712
public static <T > Observable <Notification <T >> materialize (final Observable <T > sequence ) {
706
- return create (OperationMaterialize .materialize (sequence ));
713
+ return _create (OperationMaterialize .materialize (sequence ));
707
714
}
708
715
709
716
/**
@@ -720,7 +727,7 @@ public static <T> Observable<Notification<T>> materialize(final Observable<T> se
720
727
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229099(v=vs.103).aspx">MSDN: Observable.Merge Method</a>
721
728
*/
722
729
public static <T > Observable <T > merge (List <Observable <T >> source ) {
723
- return create (OperationMerge .merge (source ));
730
+ return _create (OperationMerge .merge (source ));
724
731
}
725
732
726
733
/**
@@ -737,7 +744,7 @@ public static <T> Observable<T> merge(List<Observable<T>> source) {
737
744
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229099(v=vs.103).aspx">MSDN: Observable.Merge Method</a>
738
745
*/
739
746
public static <T > Observable <T > merge (Observable <Observable <T >> source ) {
740
- return create (OperationMerge .merge (source ));
747
+ return _create (OperationMerge .merge (source ));
741
748
}
742
749
743
750
/**
@@ -754,7 +761,7 @@ public static <T> Observable<T> merge(Observable<Observable<T>> source) {
754
761
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229099(v=vs.103).aspx">MSDN: Observable.Merge Method</a>
755
762
*/
756
763
public static <T > Observable <T > merge (Observable <T >... source ) {
757
- return create (OperationMerge .merge (source ));
764
+ return _create (OperationMerge .merge (source ));
758
765
}
759
766
760
767
/**
@@ -770,7 +777,7 @@ public static <T> Observable<T> merge(Observable<T>... source) {
770
777
* @see <a href="http://msdn.microsoft.com/en-us/library/system.reactive.linq.observable.concat(v=vs.103).aspx">MSDN: Observable.Concat Method</a>
771
778
*/
772
779
public static <T > Observable <T > concat (Observable <T >... source ) {
773
- return create (OperationConcat .concat (source ));
780
+ return _create (OperationConcat .concat (source ));
774
781
}
775
782
776
783
/**
@@ -789,7 +796,7 @@ public static <T> Observable<T> concat(Observable<T>... source) {
789
796
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229099(v=vs.103).aspx">MSDN: Observable.Merge Method</a>
790
797
*/
791
798
public static <T > Observable <T > mergeDelayError (List <Observable <T >> source ) {
792
- return create (OperationMergeDelayError .mergeDelayError (source ));
799
+ return _create (OperationMergeDelayError .mergeDelayError (source ));
793
800
}
794
801
795
802
/**
@@ -808,7 +815,7 @@ public static <T> Observable<T> mergeDelayError(List<Observable<T>> source) {
808
815
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229099(v=vs.103).aspx">MSDN: Observable.Merge Method</a>
809
816
*/
810
817
public static <T > Observable <T > mergeDelayError (Observable <Observable <T >> source ) {
811
- return create (OperationMergeDelayError .mergeDelayError (source ));
818
+ return _create (OperationMergeDelayError .mergeDelayError (source ));
812
819
}
813
820
814
821
/**
@@ -827,7 +834,7 @@ public static <T> Observable<T> mergeDelayError(Observable<Observable<T>> source
827
834
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229099(v=vs.103).aspx">MSDN: Observable.Merge Method</a>
828
835
*/
829
836
public static <T > Observable <T > mergeDelayError (Observable <T >... source ) {
830
- return create (OperationMergeDelayError .mergeDelayError (source ));
837
+ return _create (OperationMergeDelayError .mergeDelayError (source ));
831
838
}
832
839
833
840
/**
@@ -916,7 +923,7 @@ public void unsubscribe() {
916
923
* @return the source Observable, with its behavior modified as described
917
924
*/
918
925
public static <T > Observable <T > onErrorResumeNext (final Observable <T > that , final Func1 <Exception , Observable <T >> resumeFunction ) {
919
- return create (OperationOnErrorResumeNextViaFunction .onErrorResumeNextViaFunction (that , resumeFunction ));
926
+ return _create (OperationOnErrorResumeNextViaFunction .onErrorResumeNextViaFunction (that , resumeFunction ));
920
927
}
921
928
922
929
/**
@@ -980,7 +987,7 @@ public Observable<T> call(Exception e) {
980
987
* @return the source Observable, with its behavior modified as described
981
988
*/
982
989
public static <T > Observable <T > onErrorResumeNext (final Observable <T > that , final Observable <T > resumeSequence ) {
983
- return create (OperationOnErrorResumeNextViaObservable .onErrorResumeNextViaObservable (that , resumeSequence ));
990
+ return _create (OperationOnErrorResumeNextViaObservable .onErrorResumeNextViaObservable (that , resumeSequence ));
984
991
}
985
992
986
993
/**
@@ -1004,7 +1011,7 @@ public static <T> Observable<T> onErrorResumeNext(final Observable<T> that, fina
1004
1011
* @return the source Observable, with its behavior modified as described
1005
1012
*/
1006
1013
public static <T > Observable <T > onErrorReturn (final Observable <T > that , Func1 <Exception , T > resumeFunction ) {
1007
- return create (OperationOnErrorReturn .onErrorReturn (that , resumeFunction ));
1014
+ return _create (OperationOnErrorReturn .onErrorReturn (that , resumeFunction ));
1008
1015
}
1009
1016
1010
1017
/**
@@ -1034,7 +1041,7 @@ public static <T> Observable<T> onErrorReturn(final Observable<T> that, Func1<Ex
1034
1041
* @see <a href="http://en.wikipedia.org/wiki/Fold_(higher-order_function)">Wikipedia: Fold (higher-order function)</a>
1035
1042
*/
1036
1043
public static <T > Observable <T > reduce (Observable <T > sequence , Func2 <T , T , T > accumulator ) {
1037
- return last (create (OperationScan .scan (sequence , accumulator )));
1044
+ return last (_create (OperationScan .scan (sequence , accumulator )));
1038
1045
}
1039
1046
1040
1047
/**
@@ -1106,7 +1113,7 @@ public T call(T t1, T t2) {
1106
1113
* @see <a href="http://en.wikipedia.org/wiki/Fold_(higher-order_function)">Wikipedia: Fold (higher-order function)</a>
1107
1114
*/
1108
1115
public static <T > Observable <T > reduce (Observable <T > sequence , T initialValue , Func2 <T , T , T > accumulator ) {
1109
- return last (create (OperationScan .scan (sequence , initialValue , accumulator )));
1116
+ return last (_create (OperationScan .scan (sequence , initialValue , accumulator )));
1110
1117
}
1111
1118
1112
1119
/**
@@ -1170,7 +1177,7 @@ public T call(T t1, T t2) {
1170
1177
* @see <a href="http://msdn.microsoft.com/en-us/library/hh211665(v%3Dvs.103).aspx">MSDN: Observable.Scan</a>
1171
1178
*/
1172
1179
public static <T > Observable <T > scan (Observable <T > sequence , Func2 <T , T , T > accumulator ) {
1173
- return create (OperationScan .scan (sequence , accumulator ));
1180
+ return _create (OperationScan .scan (sequence , accumulator ));
1174
1181
}
1175
1182
1176
1183
/**
@@ -1228,7 +1235,7 @@ public T call(T t1, T t2) {
1228
1235
* @see <a href="http://msdn.microsoft.com/en-us/library/hh211665(v%3Dvs.103).aspx">MSDN: Observable.Scan</a>
1229
1236
*/
1230
1237
public static <T > Observable <T > scan (Observable <T > sequence , T initialValue , Func2 <T , T , T > accumulator ) {
1231
- return create (OperationScan .scan (sequence , initialValue , accumulator ));
1238
+ return _create (OperationScan .scan (sequence , initialValue , accumulator ));
1232
1239
}
1233
1240
1234
1241
/**
@@ -1282,7 +1289,7 @@ public T call(T t1, T t2) {
1282
1289
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229847(v=vs.103).aspx">MSDN: Observable.Skip Method</a>
1283
1290
*/
1284
1291
public static <T > Observable <T > skip (final Observable <T > items , int num ) {
1285
- return create (OperationSkip .skip (items , num ));
1292
+ return _create (OperationSkip .skip (items , num ));
1286
1293
}
1287
1294
1288
1295
/**
@@ -1300,7 +1307,7 @@ public static <T> Observable<T> skip(final Observable<T> items, int num) {
1300
1307
* @return an Observable that is a chronologically well-behaved version of the source Observable
1301
1308
*/
1302
1309
public static <T > Observable <T > synchronize (Observable <T > observable ) {
1303
- return create (OperationSynchronize .synchronize (observable ));
1310
+ return _create (OperationSynchronize .synchronize (observable ));
1304
1311
}
1305
1312
1306
1313
/**
@@ -1322,7 +1329,7 @@ public static <T> Observable<T> synchronize(Observable<T> observable) {
1322
1329
* Observable
1323
1330
*/
1324
1331
public static <T > Observable <T > take (final Observable <T > items , final int num ) {
1325
- return create (OperationTake .take (items , num ));
1332
+ return _create (OperationTake .take (items , num ));
1326
1333
}
1327
1334
1328
1335
/**
@@ -1345,7 +1352,7 @@ public static <T> Observable<T> take(final Observable<T> items, final int num) {
1345
1352
* items emitted by the source Observable
1346
1353
*/
1347
1354
public static <T > Observable <List <T >> toList (final Observable <T > that ) {
1348
- return create (OperationToObservableList .toObservableList (that ));
1355
+ return _create (OperationToObservableList .toObservableList (that ));
1349
1356
}
1350
1357
1351
1358
/**
@@ -1364,7 +1371,7 @@ public static <T> Observable<List<T>> toList(final Observable<T> that) {
1364
1371
* @return an Observable that emits each item in the source Iterable sequence
1365
1372
*/
1366
1373
public static <T > Observable <T > toObservable (Iterable <T > iterable ) {
1367
- return create (OperationToObservableIterable .toObservableIterable (iterable ));
1374
+ return _create (OperationToObservableIterable .toObservableIterable (iterable ));
1368
1375
}
1369
1376
1370
1377
/**
@@ -1382,7 +1389,7 @@ public static <T> Observable<T> toObservable(Iterable<T> iterable) {
1382
1389
* @return an Observable that emits the item from the source Future
1383
1390
*/
1384
1391
public static <T > Observable <T > toObservable (Future <T > future ) {
1385
- return create (OperationToObservableFuture .toObservableFuture (future ));
1392
+ return _create (OperationToObservableFuture .toObservableFuture (future ));
1386
1393
}
1387
1394
1388
1395
/**
@@ -1405,7 +1412,7 @@ public static <T> Observable<T> toObservable(Future<T> future) {
1405
1412
* @return an Observable that emits the item from the source Future
1406
1413
*/
1407
1414
public static <T > Observable <T > toObservable (Future <T > future , long time , TimeUnit unit ) {
1408
- return create (OperationToObservableFuture .toObservableFuture (future , time , unit ));
1415
+ return _create (OperationToObservableFuture .toObservableFuture (future , time , unit ));
1409
1416
}
1410
1417
1411
1418
/**
@@ -1438,7 +1445,7 @@ public static <T> Observable<T> toObservable(T... items) {
1438
1445
* @return
1439
1446
*/
1440
1447
public static <T > Observable <List <T >> toSortedList (Observable <T > sequence ) {
1441
- return create (OperationToObservableSortedList .toSortedList (sequence ));
1448
+ return _create (OperationToObservableSortedList .toSortedList (sequence ));
1442
1449
}
1443
1450
1444
1451
/**
@@ -1451,7 +1458,7 @@ public static <T> Observable<List<T>> toSortedList(Observable<T> sequence) {
1451
1458
* @return
1452
1459
*/
1453
1460
public static <T > Observable <List <T >> toSortedList (Observable <T > sequence , Func2 <T , T , Integer > sortFunction ) {
1454
- return create (OperationToObservableSortedList .toSortedList (sequence , sortFunction ));
1461
+ return _create (OperationToObservableSortedList .toSortedList (sequence , sortFunction ));
1455
1462
}
1456
1463
1457
1464
/**
@@ -1466,7 +1473,7 @@ public static <T> Observable<List<T>> toSortedList(Observable<T> sequence, Func2
1466
1473
public static <T > Observable <List <T >> toSortedList (Observable <T > sequence , final Object sortFunction ) {
1467
1474
@ SuppressWarnings ("rawtypes" )
1468
1475
final FuncN _f = Functions .from (sortFunction );
1469
- return create (OperationToObservableSortedList .toSortedList (sequence , new Func2 <T , T , Integer >() {
1476
+ return _create (OperationToObservableSortedList .toSortedList (sequence , new Func2 <T , T , Integer >() {
1470
1477
1471
1478
@ Override
1472
1479
public Integer call (T t1 , T t2 ) {
@@ -1501,7 +1508,7 @@ public Integer call(T t1, T t2) {
1501
1508
* @return an Observable that emits the zipped results
1502
1509
*/
1503
1510
public static <R , T0 , T1 > Observable <R > zip (Observable <T0 > w0 , Observable <T1 > w1 , Func2 <T0 , T1 , R > reduceFunction ) {
1504
- return create (OperationZip .zip (w0 , w1 , reduceFunction ));
1511
+ return _create (OperationZip .zip (w0 , w1 , reduceFunction ));
1505
1512
}
1506
1513
1507
1514
/**
@@ -1571,7 +1578,7 @@ public R call(T0 t0, T1 t1) {
1571
1578
* @return an Observable that emits the zipped results
1572
1579
*/
1573
1580
public static <R , T0 , T1 , T2 > Observable <R > zip (Observable <T0 > w0 , Observable <T1 > w1 , Observable <T2 > w2 , Func3 <T0 , T1 , T2 , R > function ) {
1574
- return create (OperationZip .zip (w0 , w1 , w2 , function ));
1581
+ return _create (OperationZip .zip (w0 , w1 , w2 , function ));
1575
1582
}
1576
1583
1577
1584
/**
@@ -1646,7 +1653,7 @@ public R call(T0 t0, T1 t1, T2 t2) {
1646
1653
* @return an Observable that emits the zipped results
1647
1654
*/
1648
1655
public static <R , T0 , T1 , T2 , T3 > Observable <R > zip (Observable <T0 > w0 , Observable <T1 > w1 , Observable <T2 > w2 , Observable <T3 > w3 , Func4 <T0 , T1 , T2 , T3 , R > reduceFunction ) {
1649
- return create (OperationZip .zip (w0 , w1 , w2 , w3 , reduceFunction ));
1656
+ return _create (OperationZip .zip (w0 , w1 , w2 , w3 , reduceFunction ));
1650
1657
}
1651
1658
1652
1659
/**
0 commit comments