2016-06-22 3 views
0

다음 두 arraylists 있습니다. 두 명의 arraylists를 비교하여 최신 날짜를 반환하십시오

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"] 

필요하다. 아무도 이것을 달성하는 방법을 제안하시기 바랍니다 수 있습니다.

감사합니다.

+1

에서 (즉, 인덱스와 같은 값입니다) 현재 키를 설정하고 다른 키를 찾을 때까지 목록을 통과하고 현재의 키와 해당 값을 넣어하면 값 ArrayList를인가 이미 분류 된거야? 나가 의미하는 무엇을 3 개의 다른 날짜를 위해 열쇠 "1"를 위해이다, 당신은 마지막 (세 번째) 가치가 마지막 날짜 확실하다? –

+0

키 문자열의 해시 맵과 삽입 날짜의 값 arraylist를 사용하여 만들 수 있습니다. 그러면 키를 검색 할 수 있으며 그 값은 값 arraylist에 마지막으로 삽입 된 요소가됩니다 –

+0

키는 정렬되지만 날짜는 정렬되지 않습니다. 따라서 최신 날짜는 첫 번째 두 번째 또는 세 번째 값으로 지정할 수 있습니다. – rafavinu

답변

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 당신이 쓸 수

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

은 좋아 :

지도로
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); 
    } 

} 

와 이전 키 값을 대체 (해시 맵,의 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을 사용합니다.

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

}