Как распечатать streamex на консоли
я пытаюсь распечатать все элементы streamex на консоли, но всегда получаю эту проблему
Итак, я вызываю метод «конвертировать» из основного, но он не работает. У вас есть идеи, как я могу сделать это правильно?
Я надеюсь получить полезный ответ на мой вопрос.
1 ответ
Пожалуйста, опубликуйте свой код, его трудно прочитать на скриншоте. Из вашего вывода кажется, что вы печатаете объект StreamEx из метода convert. Это не выведет то, что вам нужно.
Когда вы печатаете объект Java, он вызывает метод toString(), который наследуют все объекты. По умолчанию метод toString() возвращает строку, содержащую имя класса, за которым следует знак @, а затем шестнадцатеричное представление области памяти, которой был назначен созданный объект.
Вот почему вы получаете такой вывод,
Сначала вам нужно повторить поток StreamEx, а затем распечатать объект. Обратите внимание, что в классе Racer метод toString переопределен. Поэтому, когда мы вызываем print для объекта-гонщика, он вызывает метод toString(), который мы написали.
import java.util.ArrayList;
import java.util.List;
import one.util.streamex.StreamEx;
class PopupMenuExample {
public static void main(String args[]) {
StreamEx<Racer> racerStream = convert();
System.out.println("this is wrong: " + racerStream);
System.out.println("this is correct: ");
racerStream.forEach(
racer -> {
System.out.println(racer);
}
);
}
private static StreamEx<Racer> convert() {
Racer r1 = new Racer("one", 40);
Racer r2 = new Racer("two", 100);
List<Racer> racers = new ArrayList<>();
racers.add(r1);
racers.add(r2);
return StreamEx.of(racers);
}
}
class Racer {
String name;
Integer speed;
public Racer(String name, Integer speed) {
this.name = name;
this.speed =speed;
}
@Override
public String toString() {
return String.format("{ name:%s, speed: %d }", name, speed);
}
}
Выход:
это неправильно: [электронная почта защищена][электронная почта защищена]
это правильно: {имя:один, скорость: 40} {имя:два, скорость: 100}