RxJava: diferença entre doOnNext e doOnEach

Em quais casos eu devo usar doOnNext e em quais casos doOnEach?

 .doOnEach(new Action1<Notification<? super MessageProfile>>() {
                @Override
                public void call(Notification<? super MessageProfile> notification) {

                }
            })
 .doOnNext(new Action1<MessageProfile>() {
                @Override
                public void call(MessageProfile profile) {
                    messageProfileDao.save(profile);
                }
            })

Parece que os dois operadores têm o mesmo efeito.

questionAnswers(1)

yourAnswerToTheQuestion