如何将StreamEx对象打印到控制台

问题描述 投票:0回答:1

我尝试在控制台上打印 StreamEx 的所有元素,但我总是遇到这个问题:

one.util.streamex.StreamEx@2e817b38

所以我从 main 中调用

convert
方法,但它不起作用。我怎样才能做到正确?

java java-stream streamex
1个回答
0
投票

请发布您的代码,很难阅读屏幕截图。 从你的输出来看,你似乎正在从转换方法打印 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 }

© www.soinside.com 2019 - 2024. All rights reserved.