java - 使用 map 的键从值中选择最高数据 - Java

标签 java date dictionary arraylist

我有一个包含日期和产品发布类型的 map 。

示例(“2015/04/12”,“1|Prod43”);

我的 map 值:

2015/08/27  1|Prod23
2015/12/15  1|Prod55
2016/04/08  1|Prod09
2016/04/09  2|Prod09
2016/04/12  3|Prod09

我想维护 2 个 arrayList,dateList 包含键,prodList 包含值。但限制是,4 月份有 3 个 Prod09 版本,用“|”前面的数字表示。象征。我只想要该产品任意月份的最新版本。

这里,4 月份有 3 个版本,我只想将第 3 个版本放入我的 arrayList 中。

需要我的 arrayList 是这样的:

dateList -> ["2015/08/27","2015/12/15","2016/04/12"]
prodList - >["1|Prod23","1|Prod55","3|Prod09"]

代码:

{
Map<String,String> dateMap = new TreeMap<String,String>();
            dateMap.put("2015/08/27","1|Prod23");
            dateMap.put("2015/12/15","1|Prod55");
            dateMap.put("2016/04/08","1|Prod09");
            dateMap.put("2016/04/09","2|Prod09");
            dateMap.put("2016/04/12","3|Prod09");
            String test1="";
            String test2="";
            int count=0;
            List<String> prodList = new ArrayList<String>();
            List<String> dateList = new ArrayList<String>();

            for (Map.Entry<String, String> entry : dateMap.entrySet()) 
                        {   
                            String key = entry.getKey().substring(0,7);
                            String dateValue = entry.getValue();

                            if(("").equals(test1)){
                                test1=key;
                                test2=key;
                            }
                            if(!(test2.equals(key))){
                                dateList.add(key);
                                prodList.add(dateValue);
                                test2=key;
                            }else{
                                if(count<1){
                                dateList.add(key);
                                prodList.add(dateValue);
                                test2=key;
                                count++;
                                }
                            }

                        }
                    System.out.println("dateList: "+dateList);
                    System.out.println("prodList: "+prodList);
}

在上述方法中,我已经找到了第二个最新版本的最大值,但是如果版本增加,这种方法将会失败。谁能建议我一个更好的方法来做到这一点。非常感谢您的帮助。

最佳答案

一些观察结果:

  • 您与“|”的连接字符表明您尝试将 2 条数据保留在一个值中。 (这是不好的信息实践,如果您确实需要两者,请为每个值创建一个带有字段的新类。或者您可以使用列表的索引作为相对排名的隐式值,就像我在下面所做的那样)。<
  • map (和其他数据结构)可以保存任何对象,包括java.util.Date(或更现代的时间类之一)、数组、 >列表
  • 尚不清楚您为何想要将日期映射到产品发布。

就您的问题而言,类似于以下 map 的结构可能更有用:

{产品 => [发布日期1、发布日期2、...] }

其中 Product 可能是“Prod23”、“Prod55”、“Prod09”等,映射的值将是 List 或数组,可能为空。 (列表更容易添加)。

要获取“Prod12”最新版本的日期,您可以执行以下操作:

dates = prodMap.get("Prod12");
lastDate = dates.get(dates.size()); // assuming they where inserted in order

有排序的集合(或者您可以提供一个比较器)来确保集合的顺序。

关于java - 使用 map 的键从值中选择最高数据 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36934642/

相关文章:

java - 正确清除 java arraylist

java - SOAP org.xmlpull.v1.XmlPullParserException : expected: START_TAG

java - Java 中的复活节日期和 UML 方法语法

java - Java 中的夏令时结束问题

c# - Dictionary.Add 方法如何进行 O(1) 摊销?

python - 如何使用字典为每个学生存储多个条目

c# - Java 6语言与C#3.0语言对比

java - Hibernate 简单示例中的错误 初学者级别

java - 如何解析格式中带有可选字符的日期

python - 如何使用值对字典进行排序并能够访问键