In RxJava 1.0, the methods that handled actions (such as .doOnNext()) expected a certain type of Action interface that was usually named Action0 (no arguments), Action1 (one argument), and so on.
In the new release of RxJava, the developers decided to adopt functional interfaces from Java 8.
Now, types of io.reactivex.functions.Action and io.reactivex.functions.Consumer are used.
For example, .doOnNext() looks like this in the current version:
.doOnNext(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
}
})
It used to be something like this earlier:
.doOnNext(new Action1<Integer>() {
@Override
public void call(Integer integer) {
}
})
The difference here is trivial, and it's very easy to change, but it can become a source of major annoyance while migrating larger code bases to the new version of RxJava.
A very similar thing has happened to (data) transformation functions from the Func interface family.
The functions have been renamed from Func3 - Func9 to Function3 - Function9, while Func became Function and Func2 became BiFunction to follow the Java 8 structure.
Finally, the mentioned changes will be virtually painless if developers use Retrolambda. A compiler will figure out the right types and interfaces automatically, so no code changes will be needed.