将两个数组列表与 return 的最新日期进行比较

Compare two arraylists to return the latest date

我有两个数组列表如下。

ArrayList<String> keys = new ArrayList<>();
ArrayList<String> values = new ArrayList<>();
keys.add("1","1","1","2","2","3");
values.add("2016-06-22 07:18:45", "2016-06-22 08:18:45", "2016-06-22 09:18:45",
"2016-06-22 03:18:45","2016-06-22 04:18:45","2016-06-22 01:18:45");

现在我需要函数

HashMap latestValues(keys, values); 输出应如下所示,

["1"=>"2016-06-22 09:18:45","2"=>"2016-06-22 04:18:45", "3"=>"2016-06-22 01:18:45"]

返回该特定键的最新日期单一值。任何人都可以建议如何实现这一目标。

感谢并提前!

您可以使用以下方法。仅当日期较新时才会覆盖值(我假设您没有更改日期格式)

    Map<String,String> hashMap = new HashMap<>();
    List<String> keys = new ArrayList<>();
    List<String> values = new ArrayList<>();

    if(keys.size() != values.size())
        return null;

    for(int i=0; i<keys.size(); i++){
        String keyVal = hashMap.get(keys.get(i));
        if(keyVal==null || keyVal.compareTo(values.get(i))>0){
            // second condition ensures value is only replaced if it is a later date
            hashMap.put(keys.get(i), values.get(i));
        }
    }

    return hashMap;

我想这样就可以了。

public static void main(String[] args) {
    ArrayList<String> keys = new ArrayList<>(Arrays.asList("1", "1", "1", "2", "2", "3"));
    ArrayList<String> values = new ArrayList<>(Arrays.asList("2016-06-22 07:18:45", "2016-06-22 08:18:45", "2016-06-22 09:18:45",
            "2016-06-22 03:18:45", "2016-06-22 04:18:45", "2016-06-22 01:18:45"));
    HashMap<String, String> map = new HashMap<String, String>();

    for (int i = 0; keys.size() == values.size() && i < keys.size(); i++) {
        String key = keys.get(i);
        String value = values.get(i);
        if (!map.containsKey(key) || dateAsNo(value) > dateAsNo(map.get(key))) {
            map.put(key, value);
        }
    }
    System.out.println(map);
}

public static long dateAsNo(String v) {
    return Long.parseLong(v.replaceAll("\D", ""));
}

仅当所有日期的格式相同时才有效yyyy-MM-dd hh:mm:ss

你可以这样写:

package java7.demo;
import java.util.*;
public class MapTest {
    public static void main(String args[]){
        ArrayList<String> keys = new ArrayList<>();
        ArrayList<String> values = new ArrayList<>();
        keys.add("1");
        keys.add("1");
        keys.add("1");
        keys.add("2");
        keys.add("2");
        keys.add("3");
        values.add("2016-06-22 07:18:45");
        values.add("2016-06-22 08:18:45");
        values.add("2016-06-22 09:18:45");
        values.add("2016-06-22 03:18:45");
        values.add("2016-06-22 04:18:45");
        values.add("2016-06-22 01:18:45");
        LinkedHashMap<String,String>map = new LinkedHashMap<String,String>();       
        for(int i =0; i<keys.size();i++){
            map.put(keys.get(i),values.get(i));
        }
        System.out.println(map);
    }

}

作为Map(包括hashmap,linkedhashmap)如果旧键值和新键值相同,用新键值替换旧键值,你会得到1->2016-06-22 09:18:45。首先它会把[ 1,2016-06-22 07:18:45] 映射,在第二次循环中,它将替换为 [1,2016-06-22 08:18:45].int 第三次循环,它将替换为 [1,09:18:45]。为了根据插入顺序获取数据,我使用 LinkedHashMap。

尝试与手动执行此操作相同的操作。设置当前键并遍历列表,直到找到不同的键并将当前键和适当的值(即具有相同索引的值)放入地图

public static void main (String [] args) throws IOException{
    ArrayList<String> keys = new ArrayList<>();
    ArrayList<String> values = new ArrayList<>();
    keys.add("1");keys.add("1"); keys.add("1");
    keys.add("2");keys.add("2");
    keys.add("3");
    values.add("2016-06-22 07:18:45");values.add("2016-06-22 08:18:45");values.add("2016-06-22 09:18:45");
    values.add("2016-06-22 03:18:45");values.add("2016-06-22 04:18:45");
    values.add("2016-06-22 01:18:45");

    Map<String,String> myMap = new HashMap<>();

    String currentKey = keys.get(0); // set your current key and go through your list till you find the next key and put the current key and appropriate value (that is the value with the same index) in your map
    for(int i = 0;i<keys.size();i++){            
        if(!currentKey.equalsIgnoreCase(keys.get(i))){
            myMap.put(currentKey, values.get(i-1));
            currentKey = keys.get(i);
        }
        if(i==keys.size()-1){
            myMap.put(currentKey, values.get(i));
        }
    }
    System.out.println(myMap);

}