2016-09-04 3 views
2

내가, 내가 그들을 결합 원이 내 수업목록 개체를 결합하는 방법 Java?

public class DailyIncome { 

    private String date; 
    private String total; 

} 

이 목록 객체입니다하고 나는이 목록을 가지고, 이것은

enter image description here

를 나열하고이 목록 B

입니다 enter image description here

이 예상 결과는입니다.

enter image description here

내 기대를 실현할 수 있습니까?

+1

"... 가능합니까?" - 예, 코드를 작성합니다. 너 뭐 해봤 니? –

+0

흠? 너 뭐하려고? 나는 더 큰 목표가 무엇인지 의미합니다. 그것은 당신이 더 큰 무언가를 해결하려고하는 것 같지만 잘못된 전략을 사용하고 있습니다 – Multithreader

+0

귀하의 질문은 귀하가 게시 했어야하는 [mcve]에 가깝지 않으며이를 수행하는 방법이 많습니다. 그러나 어쩌면 아마도 시작하고 싶을 것입니다. 'Map >' – Tibrogargan

답변

2

"내 기대를 실현할 수 있습니까?"

예, 그렇습니다. 그러나 지금까지 질문을하기 전에 시도한 것을 적어 두는 것이 좋습니다.

1, 귀하의 DailyIncome에는 게터와 세터가없고 필드는 private으로 장식되어 있습니다. 다른 학급에서 어떻게 방문 할 것으로 기대하십니까?

2, 시나리오에 따라 Map을 사용해야합니다.

아래 코드를 참조하십시오.

public class DailyIncome { 
    public String date; 
    public String total; 

    public DailyIncome(String date, String total){ 
     this.date = date; 
     this.total = total; 
    } 
} 

또한 Test 클래스입니다.

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Map; 
import java.util.Set; 

public class Test { 
    private List<DailyIncome> shopA = new ArrayList<DailyIncome>(); 
    private List<DailyIncome> shopB = new ArrayList<DailyIncome>(); 
    private List<List<String>> shop = new ArrayList<List<String>>(); 
    public void initialize(){ 
     shopA.add(new DailyIncome("20-08-16", "4")); 
     shopA.add(new DailyIncome("21-08-16", "8")); 
     shopA.add(new DailyIncome("23-08-16", "3")); 

     shopB.add(new DailyIncome("20-08-16", "6")); 
     shopB.add(new DailyIncome("21-08-16", "7")); 
     shopB.add(new DailyIncome("22-08-16", "8")); 
    } 
    public void calculate(){ 

     Map<String, String> mapA = new HashMap<String, String>(); 
     Map<String, String> mapB = new HashMap<String, String>(); 

     for(DailyIncome income: shopA){ 
      mapA.put(income.date, income.total); 
     } 

     for(DailyIncome income: shopB){ 
      mapB.put(income.date, income.total); 
     } 


     Set<String> keySet = new HashSet<String>(); 
     keySet.addAll(mapA.keySet()); 
     keySet.addAll(mapB.keySet()); 

     Object keyArr[] = keySet.toArray(); 

     for(int i = 0; i < keyArr.length; i++){ 
      String key = (String)keyArr[i]; 
      String totalA = mapA.containsKey(key) ? mapA.get(key):"0"; 
      String totalB = mapB.containsKey(key) ? mapB.get(key):"0"; 
      List<String> itemList = new ArrayList<String>(); 
      itemList.add(key); 
      itemList.add(totalA); 
      itemList.add(totalB); 
      shop.add(itemList); 
     } 

     /* 
     * print 
     */ 
     for(List<String> itemList: shop){ 
      System.out.print(itemList.get(0) + " "); 
      System.out.print(itemList.get(1) + " "); 
      System.out.print(itemList.get(2)); 
      System.out.println(); 
     } 
    } 

    public static void main(String args[]){ 
     Test obj = new Test(); 
     obj.initialize(); 
     obj.calculate(); 
    } 
} 
+0

와우처럼 당신의 데이터를 변경하면 정말 도움이됩니다, 대단히 감사합니다, 케이스가 닫힙니다. – unknown

-1

나는 두 가지 해결책을 좋아했습니다! 나는 당신이 자바를 사용하고 있다면 (DailyIncome의 예제를 보면서) 이런 식으로 할 수 있다고 생각한다.

다음을 시도해 보라. Integer 대신 DailyIncome의 목록을 만들면된다. 콜렉션 id = Arrays.asList (2316, 2317, 2318); 컬렉션 existingId = Arrays.asList (1004, 1762, 1892, 1342, 1942, 2316);

Collection<Integer> similar = new HashSet<Integer>(id); 
    similar.addAll(existingId); 


    System.out.println("Similar:"+similar); 
1

@Tibrogargan는 당신이 클래스와 데이터를 재고하지 않은 경우 함께 결합하는 것이 더 쉬울 수 있지만,지도로 것 말했듯이. 이것은 Java가 데이터를 자동으로 날짜 목록으로 읽는 것이기 때문에 여러 개의 정수 (소득)와 연관되어 있기 때문입니다. 나는 이것을 여러 번 해보았으며 "문제"에 대해 처음 발견 한 방법 대신에이 방법을 사용하는 것이 더 쉽다는 것을 알았습니다.

그러나이 같은지도가 있어야합니다

Map<Date, HashMap<ListId, Long>> 

각 목록의 소득을 저장할 수있을 것으로

는, 다음의 결과 "GET (ListId)는"null을 반환하는 경우, 당신은 그 명부를 위해 소득이 올지 않을 것이라는 점을 알고있다.

희망이 도움이됩니다. Sneling.

관련 문제