2014-11-17 1 views
0

둘 다 JSON을 단일 객체 목록으로 반환하는 두 개의 API 결과를 병합하려고합니다.두 개의 Json 결과 간의 조인을 향상시키는 방법은 무엇입니까?

현재 기본적으로 두 개의 for 루프를 반복하여 각 목록의 항목을 일치시킵니다. 이 작업을 수행하는보다 효율적인 방법이 있습니까? 이 과정은 현재 너무 오래 취하고 있습니다.

private List<SingularEntry> combineAdsAndCreatives(JsonNode creativeEntries, JsonNode adEntries) 
{ 
    List<SingularEntry> entries = new ArrayList<SingularEntry>(); 
    for (JsonNode node : adEntries) { 
      node = adHashToNode(node, creativeEntries); 
      if(node != null) 
      { 
       entries.add(convertNode(node)); 
      } 
    } 
    return entries; 
} 

private JsonNode adHashToNode(JsonNode node, JsonNode creativeEntries) 
{ 
    for(JsonNode creativeNode : creativeEntries) 
    { 
     if(node.get("campaign_network_id").toString().equals(creativeNode.get("campaign_network_id").toString()) &&     node.get("ad_network").toString().equals(creativeNode.get("ad_network").toString())) 
     { 
      ObjectNode newNode = (ObjectNode) node; 
      newNode.put("image_hash", creativeNode.get("image_hash")); 
      newNode.put("creative_name", creativeNode.get("creative_name")); 
      return newNode; 
     } 
     } 
     return null; 
} 

답변

1

그것은 JsonNode을 유지하는 JsonNodeWrapper 클래스를 정의하고() 메소드를 등호를 정의하는 것이 좋습니다 (또한 해시 코드() 메소드를해야 할 수도 있습니다) 서로 래퍼를 비교하기 :

나는 다음과 같은 코드가 있습니다 JsonNode 랩퍼.

두 가지 모두를 수행하면 JsonNodeWrappers가 생성되고 생성 된 모든 것들을 하나의 세트에 배치하여 고유 한 것들만 남겨 둘 수 있습니다.

+0

차이점은 무엇입니까? 두 목록을 두 번 반복해도 여전히 반복됩니다. – Bob

+1

아니요, 각 목록에 대해 한 번 루프합니다. 게시 된 코드가 N * M을 반복합니다. 첫 번째 목록의 각 항목에 대해 두 번째 목록을 반복합니다. – StanislavL

+0

"두 목록을 모두 거친다"는 의미를 보여줄 수 있습니까? (JsonNode 노드 : creativeEntries)에 대한 – Bob

관련 문제