2017-02-28 9 views
0

は、データセットは、これら二つのリスト、leftJoin、rightJoin、アウター・ジョインとinnerJoinはJava8で利用可能な任意の簡単な機能がにあり

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

public class JoinMap { 
    public static List<Map<String, Object>> getFirstMap() { 
     List<Map<String, Object>> data = new ArrayList<>(); 
     Map<String, Object> dataMap2 = new HashMap<>(); 
     dataMap2.put("user", "vs"); 
     dataMap2.put("data1", 12.0); 
     dataMap2.put("data2", 42.0); 
     dataMap2.put("data3", 32.0); 
     data.add(dataMap2); 
     Map<String, Object> dataMap1 = new HashMap<>(); 
     dataMap1.put("user", "samraj"); 
     dataMap1.put("data1", 11.0); 
     dataMap1.put("data2", 41.0); 
     dataMap1.put("data3", 31.0); 
     data.add(dataMap1); 
     Map<String, Object> dataMap = new HashMap<>(); 
     dataMap.put("user", "varghees"); 
     dataMap.put("data1", 10.0); 
     dataMap.put("data2", 40.0); 
     dataMap.put("data3", 30.0); 
     data.add(dataMap); 
     return data; 
    } 

    public static List<Map<String, Object>> getSecondMap() { 
     List<Map<String, Object>> data = new ArrayList<>(); 
     Map<String, Object> dataMap2 = new HashMap<>(); 
     dataMap2.put("user", "vs"); 
     dataMap2.put("test1", 12.0); 
     dataMap2.put("test2", 42.0); 
     dataMap2.put("test3", 32.0); 
     data.add(dataMap2); 
     Map<String, Object> dataMap1 = new HashMap<>(); 
     dataMap1.put("user", "samraj"); 
     dataMap1.put("test1", 11.0); 
     dataMap1.put("test2", 41.0); 
     dataMap1.put("test3", 31.0); 
     data.add(dataMap1); 
     Map<String, Object> dataMap = new HashMap<>(); 
     dataMap.put("user", "varghees"); 
     dataMap.put("test1", 10.0); 
     dataMap.put("test2", 40.0); 
     dataMap.put("test3", 30.0); 
     data.add(dataMap); 
     return data; 
    } 

    public static List<Map<String, Object>> leftJoin(List<Map<String, Object>> map1, List<Map<String, Object>> map2) { 

    } 
    public static List<Map<String, Object>> rightJoin(List<Map<String, Object>> map1, List<Map<String, Object>> map2) { 

    } 
    public static List<Map<String, Object>> innerJoin(List<Map<String, Object>> map1, List<Map<String, Object>> map2) { 

    } 
    public static List<Map<String, Object>> outerJoin(List<Map<String, Object>> map1, List<Map<String, Object>> map2) { 

    } 

    public static void main(String[] argv) { 
     List<Map<String, Object>> firstMap = getFirstMap(); 
     List<Map<String, Object>> secondMap = getSecondMap(); 
    } 
} 

に加入行う必要があり、地図の2つのリストを持ってJavaでマップオブジェクトのリストに参加しますこれらの方法を達成するか?私はデータの反復処理や新しいデータセットの作成を避けようとしています。

答えて

1

あります。次に、内部結合にストリームを使用する例を示します。 "user"に参加する必要があるという事実を知っていると仮定しています(もしそうでなければ、もっと複雑になっていますが、それでもやり遂げることができます)。

public static List<Map<String, Object>> innerJoin(List<Map<String, Object>> map1, List<Map<String, Object>> map2) { 
    return map1.stream().flatMap(m1 -> 
     map2.stream() 
       .filter(m2 -> m1.get("user").equals(m2.get("user"))) 
       .map((Map<String, Object> m2) -> { 
        Map<String, Object> mr = new HashMap<>(); 
        mr.putAll(m1); 
        mr.putAll(m2); 
        return mr; 
       }) 
    ).collect(Collectors.toList()); 
} 

私はあなたがインスピレーションを受けて、自分で他の人ができると思うと思います。

+0

はいこれはうまく機能しています。私たちが他の機能を修正できれば、これを解決策としてマークします – CrazyProgrammer

関連する問題