使用流

时间:2017-03-20 13:23:26

标签: java java-stream

我试图打印出一个表示数据库中行的列表 在我尝试使用流打印列表的那一刻,它打印出我认为该项目的位置?

这就是我所看到的输出:

BLL.Teacher@6d9c638

BLL.Teacher@7dc5e7b4

处理完成,退出代码为0

这些输出中的每一个都是数据库中的1行,因为当我添加另一行时,会增加一个额外的输出。

这个代码给出了上面的输出:

public class Main {
public static void main(String[] args) {
    try {
        Controller.getAlleTeachers()
                .stream()
                .forEach(System.out::println);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
}

当我向其添加地图功能时,它会给出正确的输出。

public class Main {
public static void main(String[] args) {
    try {
        Controller.getAlleTeachers()
                .stream()
                .map(m->m.getFirstName())
                .forEach(System.out::println);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
}

因此上面的代码确实输出了数据库中行的名字 此外,当我使用foreach打印出列表时,输出是正确的:

public class Main {
public static void main(String[] args) {
    try {
        for (Teacher t: Controller.getAlleTeachers()
             ) {
            System.out.println(t.getFirstName() + " " +
                               t.getLastName() + " " +
                               t.getCourse() + " " +
                               t.getStartDate());
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
}

所以这段代码的最后一部分也输出了所有正确的信息, 所以我知道问题不是连接到db或访问数据,甚至是传递数据的方法。所以我认为它必须与流有关?为什么我在使用流时会得到如此奇怪的输出?

3 个答案:

答案 0 :(得分:0)

区别在于lambda表达式使用对象的toString(),每个循环使用字段的值。你可以把

System.out.println(t.getFirstName() + " " +
                               t.getLastName() + " " +
                               t.getCourse() + " " +
                               t.getStartDate());

在lambda表达式

答案 1 :(得分:0)

当您尝试打印教师实例时;调用该对象的toString()方法。由于您没有覆盖toString(),因此您将获得默认的toString()。 BLL.Teacher@6d9c638

如果我没记错,@之后的十六进制值是对象的内存位置

长话短说试图实施 Public String toString(){return this.name + ....其余字段;} 关于教师对象

答案 2 :(得分:0)

看起来你没有覆盖Teacher类中的toString()方法。 BLL.Teacher@6d9c638 BLL.Teacher@7dc5e7b4 - 这些是对象的引用(默认为toString()输出)。尝试覆盖toString()方法。