/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.stream.*;
import java.util.List;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
	List<Map<String, Map<String, Genuineness>>> taskHandles = new ArrayList<>();
        Map<String, Map<String, Genuineness>> map1 = new HashMap<>();
        Map<String, Genuineness> map1Sub = new HashMap<>();
        map1Sub.put("APP_1", new Genuineness(1, 1,1));
        map1.put("USER_1", map1Sub);
      taskHandles.add(map1);



        Map<String, Map<String, Genuineness>> map2 = new HashMap<>();
        Map<String, Genuineness> map2Sub = new HashMap<>();
        map2Sub.put("APP_1", new Genuineness(1, 1,1));
        map2Sub.put("APP_2", new Genuineness(2, 2,2));
        map2.put("USER_2", map2Sub);
        taskHandles.add(map2);


        Map<String, Map<String, Genuineness>> map3 = new HashMap<>();
        Map<String, Genuineness> map3Sub = new HashMap<>();
        map3Sub.put("APP_1", new Genuineness(1, 1,1));

        map3.put("USER_1", map3Sub);
        taskHandles.add(map3);


        Map<String, Map<String, Genuineness>> map4 = new HashMap<>();
        Map<String, Genuineness> map4Sub = new HashMap<>();
        map4Sub.put("APP_1", new Genuineness(1, 1,1));
        map4Sub.put("APP_2", new Genuineness(2, 2,2));
        map4.put("USER_2", map4Sub);
        taskHandles.add(map4);
        
        
        final Map<String, Map<String, Genuineness>> map = taskHandles.stream()
                .flatMap(m -> m.entrySet().stream()).collect(
                        Collectors.toMap(Map.Entry::getKey, e -> e.getValue().entrySet().stream()
                                .collect(
                                        Collectors.toMap(Map.Entry::getKey,
                                                g -> new Genuineness(g.getValue().getTotal(), g.getValue().getTotalGenuine(), g.getValue().getTotalDevelopment()),
                                                (g1, g2) -> new Genuineness(g1.getTotal() + g2.getTotal(),
                                                        g1.getTotalGenuine() + g2.getTotalGenuine(),
                                                        g1.getTotalDevelopment() + g2.getTotalGenuine()
                                                )
                                        )
                                ),(l, r) -> {
                                  l.forEach((k, v) -> r.merge(k, v,
                                          (bi, bii) -> new Genuineness(bi.getTotal() + bii.getTotal(),
                                                  bi.getTotalGenuine() + bii.getTotalGenuine(),
                                                  bi.getTotalDevelopment() + bii.getTotalGenuine())));
                                  return r;
                                }

                        )
                );
                
                System.out.println(map);
	}
}

class Genuineness {
    public Genuineness(int total, int totalGenuine, int totalDevelopment) {
        this.total = total;
        this.totalGenuine = totalGenuine;
        this.totalDevelopment = totalDevelopment;
    }

    int total;

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public int getTotalGenuine() {
        return totalGenuine;
    }

    public void setTotalGenuine(int totalGenuine) {
        this.totalGenuine = totalGenuine;
    }

    public int getTotalDevelopment() {
        return totalDevelopment;
    }

    public void setTotalDevelopment(int totalDevelopment) {
        this.totalDevelopment = totalDevelopment;
    }

    int totalGenuine;

    @Override
    public String toString() {
        return "Genuineness{" +
                "total=" + total +
                ", totalGenuine=" + totalGenuine +
                ", totalDevelopment=" + totalDevelopment +
                '}';
    }

    int totalDevelopment;
}