说我有一组课程:我的是Set < CourseListing >
CourseListing
的一些示例结果如下:
Number Name Product
TRN-001 Sample Name1 prod1
TRN-001 Sample Name1 prod2
TRN-001 Sample Name1 prod3
TRN-002 Sample Name2 prod1
TRN-003 Sample Name3 prod1
如何将TRN-001的产品组合成一个字段(即逗号分隔的字符串)?它应该如下所示:
Number Name Product
TRN-001 Sample Name1 prod1, prod2, prod3
TRN-002 Sample Name2 prod1
TRN-003 Sample Name3 prod1
以下是CourseListing
类的示例:
public class CourseListing{
private String Number, Name, Product;
public CourseListing(){
}
//getters and setters;
}
我正在使用List < CourseListing >
答案 0 :(得分:0)
您的TRN号码似乎是标识符,为什么不使用地图而不是List?
何时需要添加新产品:
如果代码不存在,请添加条目(CourseListing.getTNR, CourseListing)
如果存在,请修改现有的课程列表。
答案 1 :(得分:0)
这是我如何去做,注意它可能不是最好的解决方案,但它会像你根据COurseListing数字解释一样对它们进行分组。 1.创建一个单独的类作为第一个列表的对象类(实际上是POJO
public class CourseListing {
private String number;
private String Name;
private String product;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getProduct() {
return product;
}
public void setProduct(String product) {
this.product = product;
}
}
创建第二个类对象或使用上面的现有对象。现在你有每组的两个对象。
CourseListing CourseListingNotGrouped = new CourseListing(); CourseListing CourseListingGrouped =新课程列表();
循环浏览第一个列表,并在number = TRN-001时将其添加到第二个对象列表中。
答案 2 :(得分:0)
您可以迭代收集并过滤CourseListing
eq Number
所有TRN-001
。
List<CourseListing> tempList = new ArrayList<>();
for(CourseListing c:courseListingList){
if(c.getNumber().equals("TRN-001"))
tempList.add(c);
}
你也可以使用 -
q-Link是一个Java集合操作库,可以最大限度地减少工作量。
List<CourseListing> result = sf.forList(courseListing).filter().p("Number").eq().val("TRN-001").toList();
答案 3 :(得分:0)
我以另一种方式解决了这个问题(通过改变通过SQL结果集创建List的方式)。这仍然是一个有趣的问题,我同意我应该使用HashMap。谢谢你的帮助。
如果有人遇到类似问题,请输入以下代码:
conn = DriverManager.getConnection(url, userName, password);
stmt = conn.createStatement();
ResultSet rset = null;
PreparedStatement pstmt = null;
pstmt = conn.prepareStatement("select * FROM CourseProduct "
+ "INNER JOIN Course "
+ "ON CourseProduct.number=Course.number "
+ "inner join Product "
+ "on CourseProduct.P_ID=Product.P_ID "
+ "WHERE "
+ "(superProduct = ? or ? ='') "
+ "and (product = ? or ? ='') "
+ "and (location = ? or ? ='') "
+ "and (type = ? or ? ='') "
+ "and (category = ? or ? ='') "
+ "order by Course.number asc");
pstmt.setString(1, superProduct);
pstmt.setString(2, superProduct);
pstmt.setString(3, product);
pstmt.setString(4, product);
pstmt.setString(5, location);
pstmt.setString(6, location);
pstmt.setString(7, type);
pstmt.setString(8, type);
pstmt.setString(9, category);
pstmt.setString(10, category);
rset = pstmt.executeQuery();
String tempString = " ";
String tempNumber1=null, tempNumber2 = null;
while (rset.next()) {
// here we go
tempNumber1 = rset.getString("number");
tempString+=", "+rset.getString("product");
if (tempNumber1 == null ? tempNumber2 == null : tempNumber1.equals(tempNumber2)) {
courseListing.remove(courseListing.size()-1);
courseListing.add(new CourseListing(
rset.getDouble("price"),
rset.getString("number"),
rset.getString("name"),
rset.getString("location"),
rset.getString("unit"),
rset.getString("duration"),
rset.getString("type"),
rset.getString("role"),
rset.getString("category"),
rset.getString("maxNumStudents"),
rset.getString("superProduct"),
rset.getString("subProduct"),
tempString));
}
else {
tempString=rset.getString("product");
tempNumber2 = rset.getString("number");
courseListing.add(new CourseListing(
rset.getDouble("price"),
tempNumber2,
rset.getString("name"),
rset.getString("location"),
rset.getString("unit"),
rset.getString("duration"),
rset.getString("type"),
rset.getString("role"),
rset.getString("category"),
rset.getString("maxNumStudents"),
rset.getString("superProduct"),
rset.getString("subProduct"),
tempString));
}
}