将重复项分组直到特定计数

时间:2012-09-28 18:10:29

标签: java grouping

我有许多随意出现的xml包含Ocount,Lnumber以及其他数据。我创建了一个类来获取数据。

我的问题是如何对具有相同 Lnumber(字符串)的xml进行分组,直到它到达Ocount(int)。(具有相同lnumber的xmls具有相同的Ocount) 。并最终发送一封告诉xmls的电子邮件已被处理。

String readLine = FileHandler.checkListFile(sh.getShipmentHeader().getBillToCustomer());

            if (!readLine.isEmpty())
            {
                int orderCount = 0;
                int index = readLine.indexOf(";") + 1;

                String customerName = readLine.substring(index, readLine.indexOf(";", index)).trim();

                index = readLine.indexOf(";", index) + 1;
                String to = readLine.substring(index, readLine.length()).trim();



                if (!billMap.containsKey(sh.getShipmentHeader().getBillToCustomer()))
                    {
                    billMap.put(sh.getShipmentHeader().getBillToCustomer(), 1);
                    orderCount = 1;
                    }
                else
                    {
                    billMap.put(sh.getShipmentHeader().getBillToCustomer(), ((int) billMap.get(sh.getShipmentHeader().getBillToCustomer())) + 1);
                    orderCount = (int) billMap.get(sh.getShipmentHeader().getBillToCustomer());
                    } 

                outboundMessage += sh.getShipmentHeader().getOrderNumber() + li ;

                logger.info("On-Demand Outbound Export Info: " + orderCount + " processed out of " + sh.getShipmentHeader().getOrderCount() + 
                        " for " + customerName);


                if (orderCount == sh.getShipmentHeader().getOrderCount())
                    {
                    Email email = new Email();
                    billMap.remove(sh.getShipmentHeader().getBillToCustomer());
                    outboundMessage += li + "Total of #"+ sh.getShipmentHeader().getOrderCount() + " orders processed for "+ customerName + li ;
                    logger.info("On-Demand Email sent for " + customerName);
                    System.out.println(outboundMessage);
                    email.outboundEmail("TEST: Orders for " + customerName + " complete", outboundMessage, to);
                    outboundMessage = "";
                    email = null;
                    }}

我一直在研究这几天,我哪里出错了。

1 个答案:

答案 0 :(得分:0)

您似乎无法从xmls获取信息。我建议使用XStream [1]。它能够将对象序列化为xml并返回。通过使用XStream,您可以从xml中获取Object并轻松地比较变量(Lnumber和Ocount)。

如果您坚持使用此代码,我建议添加注释以通知我们您正在做什么,但如果想要使用java更容易替代使用xml文件,我强烈建议使用XStream作为解决方案。

[1] http://x-stream.github.io/