java - 将集合中的垂直值迭代到另一个集合中的水平值

标签 java string list

我的 java 程序中有一些字符串列表,如下所示:

List<String> input = new ArrayList<String>();

    input.add("2013-07-31,A,47");
    input.add("2013-06-28,A,52");
    input.add("2013-05-31,A,63");

    input.add("2013-07-31,B,47");
    input.add("2013-06-28,B,54");
    input.add("2013-05-31,B,91");

    input.add("2013-07-31,C,78");
    input.add("2013-06-28,C,24");

    input.add("2013-07-31,D,99");
    input.add("2013-05-31,D,82");

在每个字符串中,逗号分隔的第一个标记表示日期,第二个标记是产品名称,第三个标记是价格。

我想使用上面的列表生成一个具有下表格式的 Excel 报告:

Prod   |           Price
---------------------------------------------
  XXX    |   M1        M2        M3
---------------------------------------------
  A      |   47        52        63
  B      |   47        54        91
  C      |   78        24        00
  D      |   99        00        82
---------------------------------------------

其中 M1 为 2013-07-31,M2 为 2013-06-28,M3 为 2013-05-31。

要实现此目的,我的输出集合应该是一个包含成员字符串的字符串列表,如下所示:

  A, 47, 52, 63
  B, 47, 54, 91
  C, 78, 24, 00
  D, 99, 00, 82

请注意,在输入字符串中不存在日期值,例如对于产品 C 为 2013-05-31,对于产品 D 为 2013-06-28,输出字符串中的值应默认为 00。

因此,在输出字符串中,此类缺失值将被视为 00。

如何迭代具有产品的按日期垂直值的输入集合,以获取具有 3 个日期的按产品水平值的输出集合?

感谢您的阅读!

最佳答案

试试这个代码。您可以轻松地进一步调整它以满足您的具体需求。

    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;


    public class Test002 {

        public static void main(String[] args) throws Exception {
            List<String> input = new ArrayList<String>();

            input.add("2013-07-31,A,47");
            input.add("2013-06-28,A,52");
            input.add("2013-05-31,A,63");

            input.add("2013-07-31,B,47");
            input.add("2013-06-28,B,54");
            input.add("2013-05-31,B,91");

            input.add("2013-07-31,C,78");
            input.add("2013-06-28,C,24");

            input.add("2013-07-31,D,99");
            input.add("2013-05-31,D,82");

            HashSet<Date> dates = new HashSet<Date>();
            HashSet<String> products = new HashSet<String>();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            HashMap<String, Integer> counts = new HashMap<String, Integer>();

            for (String s : input){
                String[] str = s.split(",");
                dates.add(sdf.parse(str[0]));
                products.add(str[1]);
                counts.put(str[0] + "#" + str[1], Integer.parseInt(str[2]));
            }

            for (String p : products){
                for (Date dt : dates){
                    Integer cnt = counts.get(sdf.format(dt) + "#" + p);
                    if (cnt == null){
                        System.out.print("00 ");
                    }else{
                        System.out.printf("%2d ", cnt);
                    }
                }
                System.out.println();
            }
        }

    }

关于java - 将集合中的垂直值迭代到另一个集合中的水平值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20700800/

相关文章:

python - 两个单独的 python 列表作为一个

python - 将黑框添加到列表中的图像

Java字节类型很奇怪?

java - BeanWriter 不工作 - java.lang.NullPointerException

java - 如何使用 iText 将 URL 添加到 PDF 文档?

python - 解析此目录路径而不丢失斜杠

java - 任务执行并等待任务完成 : Java

python - 如何将回溯对象( sys.exc_info()[2] ,与 sys.exc_traceback 相同)作为字符串获取?

统计每个单词出现的次数

python - 如何在循环外打印项目?