Monday, December 14, 2015

Grouping Menggunakan Java 8 : Collectors

Satu hal yang membuat saya bahagia di java 8 adalah lambda expression (saya pemalas). Kasus yang sering dijumpai oleh developer frontend dan backend adalah mungkin masing-masing saling bertahan dengan ego dan JSON spek yang menguntungkan/memudahkan masing-masing pihak.

Intro saya kurang ada artinya ya :D
Disini saya ingin membahas tentang Collectors yang baru ada di java 8, apa hubungan nya sama lambda expression? Jadi, lambda expression bisa digunakan dalam implementasi Collectors ^^v

apa sih menarik nya?
Saat kita mengimplementasikan backend dengan microservice, kita harus siap dengan response JSON yang kita terima dari engine backend lain dan mengolah nya untuk dikirim kembali ke frontend.

Salah satu kasus :
Frontend meminta (melakukan request) user log terhadap backend-core dengan spek JSON :
[
    {   "date" : "20151214",
        "users" : [
            {
                "date" :"20151214",
                "name" : "ani",
                "activity" : "write"
            },
            {
                "date" :"20151214",
                "name" : "abi",
                "activity" : "write"
            }
        ]
    },
    {   "date" : "20151213",
        "users" : [
            {
                "date" :"20151213",
                "name" : "ani",
                "activity" : "read"
            },
            {
                "date" :"20151213",
                "name" : "abi",
                "activity" : "read"
            }
        ]
    }
]
Namun response yang diberikan backend-log adalah :
[
   {
      "date":"20151214",
      "name":"ani",
      "activity":"write"
   },
   {
      "date":"20151214",
      "name":"abi",
      "activity":"write"
   },
   {
      "date":"20151213",
      "name":"ani",
      "activity":"read"
   },
   {
      "date":"20151213",
      "name":"abi",
      "activity":"read"
   }
]
Ini adalah Log class saya :
public class Log {
    private String date;
    private String activity;
    private String user;

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getActivity() {
        return activity;
    }

    public void setActivity(String activity) {
        this.activity = activity;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    @Override
    public String toString() {
        return "Log{" +
                "date='" + date + '\'' +
                ", activity='" + activity + '\'' +
                ", user='" + user + '\'' +
                '}';
    }
}

Dengan menggunakan Collectors, kita bisa dengan mudah melakukan grouping (group by), dan cuma satu baris dengan asumsi logs = List<Log>
 Map<String, List<Log>> groups = logs.stream().collect(Collectors.groupingBy(w -> w.getDate()));

And done!
cheers! happy coding \(^^)/

No comments:

Post a Comment