很好地将一组物品分组

时间:2013-06-12 17:39:25

标签: java list class collections set

说我有一组课程:我的是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 个答案:

答案 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;
    }
}
  1. 创建第二个类对象或使用上面的现有对象。现在你有每组的两个对象。

    CourseListing CourseListingNotGrouped = new CourseListing();              CourseListing CourseListingGrouped =新课程列表();

  2. 循环浏览第一个列表,并在number = TRN-001时将其添加到第二个对象列表中。

  3. 祝你好运

答案 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)); 

            } 
        }
相关问题