Java 用流打印列表
我正在尝试打印一个列表,它表示数据库中的行 当我尝试用流打印列表时,它会打印出我认为是项目位置的内容 这就是我所看到的输出: BLL。Teacher@6d9c638 BLL。Teacher@7dc5e7b4 进程已完成,退出代码为0 这些输出中的每一个都是数据库中的一行,因为当我添加另一行时,会向其中添加一个额外的输出 这是给出上述输出的代码:Java 用流打印列表,java,java-stream,Java,Java Stream,我正在尝试打印一个列表,它表示数据库中的行 当我尝试用流打印列表时,它会打印出我认为是项目位置的内容 这就是我所看到的输出: BLL。Teacher@6d9c638 BLL。Teacher@7dc5e7b4 进程已完成,退出代码为0 这些输出中的每一个都是数据库中的一行,因为当我添加另一行时,会向其中添加一个额外的输出 这是给出上述输出的代码: public class Main { public static void main(String[] args) { try {
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();
}
}
}
当我向它添加map函数时,它会给出正确的输出
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();
}
}
}
所以代码的最后一部分也输出了所有正确的信息,
所以我知道问题不在于连接数据库或访问数据,甚至不在于传递数据的方法。所以我想一定是溪流造成的?使用streams时,我为什么会得到如此奇怪的输出?区别在于lambda表达式使用对象的toString(),for-each循环使用字段的值。你可以把
System.out.println(t.getFirstName() + " " +
t.getLastName() + " " +
t.getCourse() + " " +
t.getStartDate());
在lambda表达式中尝试打印教师实例时;调用该对象的toString()方法。由于您尚未重写toString(),因此将打印默认的toString()。BLL。Teacher@6d9c638 如果我没记错,@后面的十六进制值是对象的内存位置 长话短说尝试实现 公共字符串toString(){返回this.name+..字段的其余部分;}
在教师对象上看起来您没有在教师类中重写toString()方法BLL。Teacher@6d9c638和BLL。Teacher@7dc5e7b4-这些是对象的引用(默认为toString()输出)。尝试重写toString()方法。如果@efekActive语句为true,则重写toString方法。类似于:return fName+“”+lName+…您的问题与MySQL或JDBC无关,因此我删除了这些标记。这就成功了,tnx