0

假设我有一组课程:我的课程是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 >

4

4 回答 4

0

看来您的 TRN 号码是标识符,那么为什么不使用地图而不是列表呢?

当必须添加新产品时:

  • 如果代码不存在添加条目(CourseListing.getTNR, CourseListing)

  • 如果存在,请修改您现有的 CourseListing。

于 2013-06-12T17:50:59.607 回答
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;
    }
}
  1. 创建第二类对象或使用上面的现有对象。现在每个组都有两个对象。

    CourseListing CourseListingNotGrouped = new CourseListing(); CourseListing CourseListingGrouped = new CourseListing();

  2. 当 number=TRN-001 时,遍历您的第一个列表并将其添加到您的第二个对象列表中。

祝你好运

于 2013-06-12T17:54:37.393 回答
0

您可以遍历集合并过滤CourseListing所有Numbereq 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();
于 2013-06-12T17:54:43.063 回答
0

我以另一种方式解决了这个问题(通过更改通过 SQL 结果集创建列表的方式)。不过,这仍然是一个有趣的问题,我同意我应该使用 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)); 

            } 
        }
于 2013-06-13T14:19:36.050 回答