比较两个arraylists以返回最新日期

时间:2016-06-22 08:49:13

标签: java date arraylist hashmap date-comparison

我有两个arraylists如下。

$(document).ready(function() {
  $('.purchase__save').click(function() {
    var box_array = [];
    var i = 0;
    var boxes = $('.checkedIn:checked');
    console.log(boxes);
    $(boxes).each(function(){
        box_array[i] = this.value;
      i++;
    });
    console.log(box_array);
  });
});

现在我需要功能

<tr class="reg_name"> <th class="custom-th">Reg. Name</th> <td class="text-center"><input type="checkbox" class="checkedIn" name="reg_name[]" value="Y:1"></td> <td class="text-center"><input type="checkbox" class="checkedIn" name="reg_name[]" value="N:1"></td> <td class="text-center"><input type="checkbox" class="checkedIn" name="reg_name[]" value="B:1"></td> <td class="text-center"><input type="checkbox" class="checkedIn" name="reg_name[]" value="I:1"></td> </tr> <button type="button" class="purchase__save btn btn-default pull-right">Save</button> 输出应如下,

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");

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

谢谢并提前!

4 个答案:

答案 0 :(得分:3)

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

    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;

答案 1 :(得分:3)

我认为这样做会。

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

时才会有效

答案 2 :(得分:3)

如果您手动执行此操作,请尝试相同的操作。设置当前密钥并浏览列表,直到找到不同的密钥并将当前密钥和适当的值(即具有相同索引的值)放在地图中

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);

}

答案 3 :(得分:1)

你可以这样写:

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-&gt; 2016-06-22 09:18:45:at首先它将[1,2016-06-22 07:18:45]映射,在第二个循环中,它将替换为[1,2016-06-22 08:18:45] .int第三次循环,它将替换为[1,09:18:45]。根据插入顺序获取数据,我使用LinkedHashMap。