Вы всегда должны стремиться к коду, который легко читать и, следовательно, поддерживать.
Для этого вам не нужен RxJava, только потоки:
String joined = member.getSports().stream()
.map(sport -> sport.getName())
.collect(Collectors.joining(""));
Редактировать 1:
Так как потоки не вариант. Я бы тогда не использовал RxJava. Просто используйте код внутри вашей лямбды.
StringBuilder builder = new StringBuilder();
for (Sport sport : sports) {
builder.append(sport.getName());
}
builder.toString()
Редактировать 2:
Или вы создаете более обобщенную версию, если вам нужен также префикс и постфикс:
// Inside Utils.java
public static <T> String joinToString(List<T> list, String separator, String prefix, String postfix, Function<T, String> func) {
StringBuilder builder = new StringBuilder();
builder.append(prefix);
if (!list.isEmpty()) {
for (T t : list.subList(0, list.size() - 1)) {
builder.append(func.apply(t));
builder.append(separator);
}
builder.append(list.get(list.size() - 1));
}
builder.append(postfix);
return builder.toString();
}
и используйте его так:
Utils.joinToString(member.getSports(), "", "", "", Sport::getName));
Это очень близко к расширенной функции Kotlin joinToString .