Skip to content

Instantly share code, notes, and snippets.

@debu999
Last active December 20, 2023 03:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save debu999/64184c22f5d37989bc7ad751f3ee7fbb to your computer and use it in GitHub Desktop.
Save debu999/64184c22f5d37989bc7ad751f3ee7fbb to your computer and use it in GitHub Desktop.
Rest API university student Max per city for hacker rank
/*
* University Data App
* Description: This Java program retrieves university data from a REST API, performs analysis, and prints results.
* Author: Your Name
*/
package org.doogle;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.simple.*;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
* Main class for the University Data App.
*/
public class App {
/**
* Main method of the application.
*
* @param args Command-line arguments.
* @throws IOException If an I/O error occurs.
* @throws ParseException If there is an error parsing JSON.
*/
public static void main(String[] args) throws IOException, ParseException {
// REST API URL for university data
String urlString = "https://jsonmock.hackerrank.com/api/universities";
// Get university data from the API
JSONObject json = getUniversityData(urlString);
// Calculate the number of pages based on total and per_page values
Long total = (Long) json.get("total");
Long perPage = (Long) json.get("per_page");
Long numPage = total % perPage == 0 ? total / perPage : (total / perPage) + 1L;
// Fetch data from additional pages and append to the JSONArray
Long page = (Long) json.get("page");
JSONArray jsonArray = (JSONArray) json.get("data");
for (Long p = page + 1L; p <= numPage; p++) {
JSONObject universityJson = getUniversityData(urlString + "?page=" + String.valueOf(p));
jsonArray.addAll((JSONArray) universityJson.get("data"));
}
// Analysis variables
String city1 = "Singapore sdf"; // Replace with the desired city
String city2 = ""; // Replace with the desired city
String firstUniversity = "NOT_COMPUTED";
String secondUniversity = "NOT_COMPUTED";
Long maxFirstUniversity = 0L;
Long maxSecondUniversity = 0L;
Map<String, List<String>> cities = new HashMap<String, List<String>>();
// Perform analysis on university data
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject o = (JSONObject) jsonArray.get(i);
String city = (String) ((JSONObject) o.get("location")).get("city");
String university = (String) o.get("university");
Long intStudents = Long.valueOf(((String) o.get("international_students")).replace(",", ""));
List<String> univList = cities.getOrDefault(city, new ArrayList<>());
univList.add(university + ":" + (String) o.get("international_students"));
cities.put(city, univList);
if (city1.equals(city) && intStudents > maxFirstUniversity) {
maxFirstUniversity = intStudents;
firstUniversity = university;
} else if (city2.equals(city) && intStudents > maxSecondUniversity) {
maxSecondUniversity = intStudents;
secondUniversity = university;
}
}
// Print the result
System.out.println("NOT_COMPUTED".equals(firstUniversity) ? secondUniversity : firstUniversity);
}
/**
* Retrieves university data from a given URL.
*
* @param urlString URL of the REST API.
* @return JSONObject containing the university data.
* @throws MalformedURLException If the URL is malformed.
* @throws IOException If an I/O error occurs.
* @throws ProtocolException If there is an issue with the HTTP protocol.
* @throws ParseException If there is an error parsing JSON.
*/
private static JSONObject getUniversityData(String urlString)
throws MalformedURLException, IOException, ProtocolException, ParseException {
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
int res = conn.getResponseCode();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(sb.toString());
return json;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment