package com.loga; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.stream.Collectors; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; public class Article { private static final String URL = "https://jsonmock.hackerrank.com/api/articles"; public static void main(String[] args) throws IOException { int records=2; Map<String, Integer> titles = getArticles(); Map<String,Integer> sortedMap = titles.entrySet().stream() .sorted(Entry.comparingByValue(Comparator.reverseOrder())) .collect(Collectors.toMap(Entry::getKey, Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); List<String> keyList=new LinkedList<>(sortedMap.keySet()); for (int i=0;i<records;i++) { System.out.println(sortedMap.get(keyList.get(i))+"-> "+keyList.get(i)); } } private static Map<String, Integer> getArticles() throws IOException { Map<String,Integer> titles=new LinkedHashMap<>(); int page = 1; int totalPage = 1; String response; while (page <= totalPage) { URL obj = new URL(URL + "?page=" + page); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); while ((response = in.readLine()) != null) { JsonObject jsonResponse = new Gson().fromJson(response, JsonObject.class); totalPage = jsonResponse.get("total_pages").getAsInt(); JsonArray data = jsonResponse.getAsJsonArray("data"); for (JsonElement e : data) { JsonElement ele=e.getAsJsonObject().get("title")!=null ? e.getAsJsonObject().get("title") : e.getAsJsonObject().get("story_title")!=null ?e.getAsJsonObject().get("story_title") : null; if(!ele.isJsonNull()) { String title = ele.getAsString(); JsonElement commentEle=e.getAsJsonObject().get("num_comments"); int comments_count=commentEle.isJsonNull() ? 0 : commentEle.getAsInt(); titles.put(title,comments_count); } } } page++; } return titles; } }