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:
- Create a temporary
List<String> temp
to store the districts of a state if the full set of districts is not present intextViewString
. - Create a string as state + "(" + strings of
temp
joined on comma + ")" and add the same toresultList
. Like the original solution, remove all districts oftemp
fromdistrictSetTextView
.
Post a Comment for "How Simplify String Of Indian Districts In Java? ( Problem Extended )"