Skip to content Skip to sidebar Skip to footer

How Simplify String Of Indian Districts In Java? ( Problem Extended )

I have a string of India districts. For example String districts = district1,district2,district3,...so on (maybe all or some of districts of India). Assume, district1,district2,d

Solution 1:

Extending on my earlier answer, given below is how you can achieve this requirement:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

publicclassMain {
    publicstaticvoidmain(String[] args) {
        Set<String> districtSetRajasthan = newHashSet<>();
        districtSetRajasthan.add("Dist1");
        districtSetRajasthan.add("Dist2");
        districtSetRajasthan.add("Dist3");

        Set<String> districtSetGujrat = newHashSet<>();
        districtSetGujrat.add("Dist4");
        districtSetGujrat.add("Dist5");

        Map<String, Set<String>> mapStates = newLinkedHashMap<String, Set<String>>();
        mapStates.put("Rajasthan", districtSetRajasthan);
        mapStates.put("Gujrat", districtSetGujrat);

        // TestsStringtextViewString="Dist1,Dist2,Dist3,Dist4";
        System.out.println(getStateDistString(textViewString, mapStates));

        textViewString = "Dist1,Dist2,Dist3,Dist4,Dist5";
        System.out.println(getStateDistString(textViewString, mapStates));
    }

    static String getStateDistString(String districts, Map<String, Set<String>> mapStates) {
        // Split districts on comma and put the elements of the resultListing array into// a HashSet
        Set<String> districtSetTextView = Arrays.stream(districts.split(",")).collect(Collectors.toSet());

        List<String> resultList = newArrayList<>();

        for (String state : mapStates.keySet()) {
            Set<String> allDistrictsOfState = mapStates.get(state);
            if (districtSetTextView.containsAll(allDistrictsOfState)) {
                resultList.add(state);
                districtSetTextView.removeAll(allDistrictsOfState);
            } else {
                List<String> temp = newArrayList<>();
                for (String dist : districtSetTextView) {
                    if (allDistrictsOfState.contains(dist)) {
                        temp.add(dist);
                    }
                }
                if (temp.size() > 0) {
                    Stringx= state + "(" + String.join(",", temp) + ")";
                    resultList.add(x);
                    districtSetTextView.removeAll(temp);
                }
            }
        }

        return String.join(",", resultList);
    }
}

Output:

Rajasthan,Gujrat(Dist4)
Rajasthan,Gujrat

What's new in this solution:

  1. Create a temporary List<String> temp to store the districts of a state if the full set of districts is not present in textViewString.
  2. Create a string as state + "(" + strings of temp joined on comma + ")" and add the same to resultList. Like the original solution, remove all districts of temp from districtSetTextView.

Post a Comment for "How Simplify String Of Indian Districts In Java? ( Problem Extended )"