有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓如何简化爪哇的印度地区?(问题扩展)

我有一系列的印度地区。例如String districts = district1,district2,district3,...等等(可能是印度的全部或部分地区)
假设,
1区、2区、3区是拉贾斯坦邦的区

第4区、第5区、第6区是古吉拉特的地区

什么是情景
我想在TextView中显示districts变量,但是如果这个字符串包含任何州的所有地区,那么只应该显示州名来代替它的所有地区。它会缩小绳子的尺寸,看起来会更好
For detailed explanation refer to base question


实现了案例1
输入=第1区、第2区、第3区、第4区
产出=拉贾斯坦邦第4区

实现案例2
输入=第1区、第2区、第3区、第4区、第5区
输出=拉贾斯坦邦,第4区,第5区

实现案例2
输入=第1区、第2区、第3区、第4区、第5区、第6区
输出=拉贾斯坦邦,古吉拉特

Above cases achieved by @Live and Let Live answer


预期情况1
输入=第1区、第2区、第3区、第4区
产出=拉贾斯坦邦、古吉拉特(第4区)

预期案例2
输入=第1区、第2区、第3区、第4区、第5区
输出=拉贾斯坦邦、古吉拉特(第4区、第5区)

预期情况3
输入=第1区、第2区、第3区、第4区、第5区、第6区
输出=拉贾斯坦邦,古吉拉特


共 (1) 个答案

  1. # 1 楼答案

    my earlier answer上进行扩展,下面给出了如何实现此要求:

    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;
    
    public class Main {
        public static void main(String[] args) {
            Set<String> districtSetRajasthan = new HashSet<>();
            districtSetRajasthan.add("Dist1");
            districtSetRajasthan.add("Dist2");
            districtSetRajasthan.add("Dist3");
    
            Set<String> districtSetGujrat = new HashSet<>();
            districtSetGujrat.add("Dist4");
            districtSetGujrat.add("Dist5");
    
            Map<String, Set<String>> mapStates = new LinkedHashMap<String, Set<String>>();
            mapStates.put("Rajasthan", districtSetRajasthan);
            mapStates.put("Gujrat", districtSetGujrat);
    
            // Tests
            String textViewString = "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 = new ArrayList<>();
    
            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 = new ArrayList<>();
                    for (String dist : districtSetTextView) {
                        if (allDistrictsOfState.contains(dist)) {
                            temp.add(dist);
                        }
                    }
                    if (temp.size() > 0) {
                        String x = state + "(" + String.join(",", temp) + ")";
                        resultList.add(x);
                        districtSetTextView.removeAll(temp);
                    }
                }
            }
    
            return String.join(",", resultList);
        }
    }
    

    输出:

    Rajasthan,Gujrat(Dist4)
    Rajasthan,Gujrat
    

    此解决方案的新增功能:

    1. 如果textViewString中没有完整的地区集,则创建一个临时List<String> temp来存储一个州的地区
    2. 创建一个字符串作为state+“(“+strings of temp连接在逗号+”)并将其添加到resultList。与原始解决方案一样,从districtSetTextView中删除temp的所有区域