我试图打印出一个表示数据库中行的列表 在我尝试使用流打印列表的那一刻,它打印出我认为该项目的位置?
这就是我所看到的输出:
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或访问数据,甚至是传递数据的方法。所以我认为它必须与流有关?为什么我在使用流时会得到如此奇怪的输出?
答案 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()方法。