我是Java的初学者,在打印重复行时遇到问题。我有以下代码:
while (rs.next()) {
String curr_crn = rs.getString(2);
while(rs.next()) {
if(curr_crn != rs.getString(2)) {
String instructor = getInstructor(connection,
rs.getString(1),rs.getString(2));
String student = getStudent(connection,rs.getString(2));
detailLines.add(Library.rPad(rs.getString(1), COL1, ' ')
+ Library.rPad(rs.getString(2), COL2, ' ')
+ Library.rPad(rs.getString(3) + " " + rs.getString(4) +
" " +rs.getString(5), COL3, ' ')
+ Library.rPad(instructor, COL4, ' ')
+ newline
+ Library.rPad(student, COL1 ,' '));
}
}
}
如何将当前的crn
与其他的crn
进行比较,以免重复打印?
谢谢!
答案 0 :(得分:1)
内部while循环可以删除,因为它会使代码变得复杂。您可以创建一个HashSet对象。然后,您可以开始while循环,并在打印详细信息之后,在每次迭代的最后一行中将current_crn存储在集合中。 代码应类似于以下内容:
HashSet hs = new HashSet();
while (rs.next()) {
String curr_crn = rs.getString(2);
if( ! hs.contains(curr_crn) ) {
String instructor = getInstructor(connection,
rs.getString(1),rs.getString(2));
String student = getStudent( connection,
rs.getString(2));
detailLines.add(Library.rPad(rs.getString(1),
COL1, ' ')
+ Library.rPad(rs.getString(2), COL2, ' ')
+ Library.rPad(rs.getString(3) + " " +
rs.getString(4) + " " +
rs.getString(5), COL3, ' ')
+ Library.rPad(instructor, COL4, ' ')
+ newline
+ Library.rPad(student, COL1 ,' '));
hs.add(curr_crn);
}
}
答案 1 :(得分:0)
选择“不重复”,您将不会收到重复的元素
答案 2 :(得分:0)
在获取值之前,可以在查询中使用DISTINCT
SELECT DISTINCT column1, column2, ... FROM table_name;
SELECT DISTINCT仅返回不同的(不同的)值。 SELECT DISTINCT从结果中消除重复的记录。 DISTINCT可以与以下总计一起使用:COUNT,AVG,MAX等。
您也可以尝试使用哈希,例如:How does HashSet not allow duplicates?
答案 3 :(得分:0)
我的第一个想法是检查SQL查询并分析为什么有重复项。既然您说查询对您来说是不可触及的,我们将假定它只是返回必须返回的内容。
在这种情况下,我建议您将数据访问与逻辑分开。数据就是数据,我们认为它们是可以的:只需将它们作为bean列表返回即可。这是我们的数据层(有人称其为模型)。
现在,我们的目标是呈现没有重复的数据。构成我们的表示层的另一个类(有人称其为视图)可以执行此过滤器。例如,在这里,您将获得有关如何在添加了Java 8的流的情况下过滤列表中重复项的说明:https://www.baeldung.com/java-remove-duplicates-from-list
我希望您觉得这有用。
答案 4 :(得分:0)
使用HashSet来存储唯一的crn,并且仅当HashSet中不存在当前crn时才处理行。
Set<String> uniqueCrns = new HashSet<>();
while (rs.next()) {
String curr_crn = rs.getString(2);
// check for duplicates
if (uniqueCrns.contains(curr_crn)) {
continue;
}
// the curr_crn is unique add it to the unique set and process it
uniqueCrns.add(curr_crn);
String instructor = getInstructor(connection,
rs.getString(1),rs.getString(2));
String student = getStudent(connection,rs.getString(2));
detailLines.add(Library.rPad(rs.getString(1), COL1, ' ')
+ Library.rPad(rs.getString(2), COL2, ' ')
+ Library.rPad(rs.getString(3) + " " + rs.getString(4) +
" " +rs.getString(5), COL3, ' ')
+ Library.rPad(instructor, COL4, ' ')
+ newline
+ Library.rPad(student, COL1 ,' '));
}