我尝试在控制台上打印 StreamEx 的所有元素,但我总是遇到这个问题:
one.util.streamex.StreamEx@2e817b38
所以我从 main 中调用
convert
方法,但它不起作用。我怎样才能做到正确?
请发布您的代码,很难阅读屏幕截图。 从你的输出来看,你似乎正在从转换方法打印 StreamEx 对象。那不会输出你需要的东西。
当你打印一个java对象时,它会调用所有对象继承的toString()方法。默认情况下,toString() 方法将返回一个字符串,其中列出类的名称,后跟 @ 符号,然后是实例化对象分配到的内存位置的十六进制表示形式。
这就是为什么你会得到这样的输出,
one.util.streamex.StreamEx@2e817b38
首先需要迭代StreamEx流,然后打印对象。 请注意,在 Racer 类中,toString 方法被重写。因此,当我们在 racer 对象上调用 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);
}
}
输出:
这是错误的:one.util.streamex.StreamEx@7229724f
这是正确的: { name:one, speed: 40 } { name:two, speed: 100 }