我有一个包含日期和产品发布类型的 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/