You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取数据并为含List成员的类对象赋值并实现排序输出

解决方案

我来帮你搞定这个问题!核心思路是先解析输入数据,把同一个国家的州归集到一起,然后分别对国家和州按字母排序后输出。咱们一步步来:

1. 修正领域类的问题

首先看你现有的Country类,addState方法参数是String但要往List<State>里加,这明显不对,得改成创建State对象再添加。另外State类的compareTo方法得正确实现,确保能按名称排序:

class Country {
    String name;
    List<State> statelist = new ArrayList<>(); // 记得初始化集合,避免空指针

    public void addState(String statename) {
        this.statelist.add(new State(statename)); // 创建State对象再加入集合
    }

    // Getters and Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<State> getStatelist() {
        return statelist;
    }
}

class State implements Comparable<State> {
    String name;

    public State(String name) {
        this.name = name;
    }

    @Override
    public int compareTo(State other) {
        // 按名称字母顺序排序,要忽略大小写的话可以用name.compareToIgnoreCase(other.name)
        return this.name.compareTo(other.name);
    }

    // Getter
    public String getName() {
        return name;
    }
}

2. 实现Main类的逻辑

在Main类里,我们需要完成解析输入、归集数据、排序和输出这几个步骤:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        String input = "4 India|TamilNadu USA|Texas USA|Alaska India|Punjab";
        // 拆分输入:第一个数字是条目数,后面是各个国家-州对
        String[] parts = input.split(" ");
        // 用Map存储国家名称到Country对象的映射,避免重复创建国家实例
        Map<String, Country> countryMap = new HashMap<>();

        for (int i = 1; i < parts.length; i++) {
            String[] countryState = parts[i].split("\\|");
            String countryName = countryState[0];
            String stateName = countryState[1];

            // 如果Map里没有这个国家,就创建新的Country对象
            Country country = countryMap.getOrDefault(countryName, new Country());
            country.setName(countryName);
            country.addState(stateName);
            countryMap.put(countryName, country);
        }

        // 把Map中的Country提取出来,按国家名称排序
        List<Country> sortedCountries = new ArrayList<>(countryMap.values());
        sortedCountries.sort(Comparator.comparing(Country::getName));

        // 遍历排序后的国家,输出名称,再输出排序后的州
        for (Country country : sortedCountries) {
            System.out.println(country.getName());
            // 对当前国家的州列表排序(利用State实现的Comparable接口)
            Collections.sort(country.getStatelist());
            for (State state : country.getStatelist()) {
                System.out.println(state.getName());
            }
        }
    }
}

3. 运行结果

执行上面的代码后,会输出符合要求的内容:

India
Punjab
TamilNadu
USA
Alaska
Texas

关键细节说明

  • 用HashMap归集国家,保证同一个国家不会被重复创建,处理效率更高
  • 两次排序:一次对国家列表按名称排序,一次对每个国家的州列表排序(借助State实现的Comparable接口自动完成)
  • getOrDefault方法简化了“判断国家是否存在”的逻辑,让代码更简洁易懂

内容的提问来源于stack exchange,提问作者D1vyA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:27:07