Java 使用多个属性对对象列表进行分组

Java 使用多个属性对对象列表进行分组,java,collections,Java,Collections,如何使用Java中的多个属性对对象列表进行分组? 如果我有一个财务明细列表,其中包含州代码,部门,分行,金额,账户。 现在我想用相同的状态代码,部门,分行,金额,账户代码添加金额 FinancialDetails f1 = new FinancialDetails("01","005","test1",12.23D,"12345"); FinancialDetails f2 = new FinancialDetails("01","005","test1",123.23D,"12

如何使用Java中的多个属性对对象列表进行分组? 如果我有一个财务明细列表,其中包含
州代码
部门
分行
金额
账户
。 现在我想用相同的
状态代码
部门
分行
金额
账户代码
添加金额

    FinancialDetails f1 = new FinancialDetails("01","005","test1",12.23D,"12345");
    FinancialDetails f2 = new FinancialDetails("01","005","test1",123.23D,"12345");
    FinancialDetails f3 = new FinancialDetails("01","005","test1",99.23D,"12345");
    FinancialDetails f4 = new FinancialDetails("02","006","test1",123.23D,"89898");
    FinancialDetails f5 = new FinancialDetails("02","006","test1",125.23D,"89898");
    FinancialDetails f6 = new FinancialDetails("03","020","test2",625.23D,"89898");
    List<FinancialDetails> list = new ArrayList<FinancialDetails>();
    list.add(f1);
    list.add(f2);
    list.add(f3);
    list.add(f4);
    list.add(f5);
    list.add(f6);
FinancialDetails f1=新的财务细节(“01”、“005”、“test1”、12.23D、“12345”);
财务详情f2=新财务详情(“01”、“005”、“测试1”、123.23D、“12345”);
财务详情f3=新财务详情(“01”、“005”、“测试1”、99.23D、“12345”);
财务详情f4=新财务详情(“02”、“006”、“测试1”、123.23D、“89898”);
财务详情f5=新财务详情(“02”、“006”、“测试1”、125.23D、“89898”);
财务详情f6=新财务详情(“03”、“020”、“测试2”、625.23D、“89898”);
列表=新的ArrayList();
列表。添加(f1);
列表。添加(f2);
列表。添加(f3);
列表。添加(f4);
列表。添加(f5);
列表。添加(f6);
现在,我想通过添加具有相同状态代码、部门、分支机构、帐户的金额来创建一个对象,请尝试:

private static class Key {
    String stateCode;
    String dept;
    // ...
    // + hashcode equals
}
public Collection<List<FinancialDetails>> group(List<FinancialDetails> original) {
    Map<Key, List<FinancialDetails>> groupingMap = new HashMap<>();
    for(FinancialDetails fd : original) {
        Key key = new Key(fd.getStateCode, fd.getDept); // ...
        List<FinancialDetails> group = groupingMap.get(key);
        if(group == null) {
            group = new ArrayList<>();
            groupingMap.put(key, group);
        }
        group.add(fd);
    }
    return groupingMap.values();
}
私有静态类密钥{
字符串状态码;
弦乐部;
// ...
//+哈希代码等于
}
公共收集组(列表原件){
Map groupingMap=新建HashMap();
用于(财务详情fd:原件){
Key Key=newkey(fd.getStateCode,fd.getDept);/。。。
列表组=groupingMap.get(键);
如果(组==null){
组=新的ArrayList();
groupingMap.put(键,组);
}
加组(fd);
}
返回groupingMap.values();
}
班级学生{

private String age;
private String name;
public String getAge() {
    return age;
}
public void setAge(String age) {
    this.age = age;
}
@Override
public String toString() {
    return "Student [age=" + age + ", name=" + name + "]";
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Student(String age, String name) {
    super();
    this.age = age;
    this.name = name;
}
}

公共课你好{

public static void main(String args[]){

    ArrayList<Student> al=new ArrayList<Student>();
    al.add(new Student("12","Prince"));
    al.add(new Student("10", "Amar"));
    al.add(new Student("12","Akansha"));
    HashMap<String, List<Student>> map=new HashMap<String, List<Student>>();
    Iterator<Student> itr=al.iterator();
    while(itr.hasNext()){

        Student s1=itr.next();
        if(map.containsKey(s1.getAge())){

            List<Student> innerList=map.get(s1.getAge());
            innerList.add(s1);
            map.put(s1.getAge(), innerList);

        }else{

            List<Student> innerList=new ArrayList<Student>();
            innerList.add(s1);
            map.put(s1.getAge(),innerList);

        }
    }

    for(Map.Entry<String, List<Student>> entry:map.entrySet() ){

        String key=entry.getKey();
        List<Student> list=entry.getValue();
        System.out.print(key+"=");
        for(Student obj:list){

            System.out.print(obj+" ");
        }
        System.out.println();
    }


}
publicstaticvoidmain(字符串参数[]){
ArrayList al=新的ArrayList();
新增(新学生(“12”,“王子”);
加上(新学生(“10”,“阿马尔”);
新增(新学生(“12”,“阿肯色”);
HashMap=newHashMap();
迭代器itr=al.Iterator();
while(itr.hasNext()){
学生s1=itr.next();
if(map.containsKey(s1.getAge())){
List innerList=map.get(s1.getAge());
innerList.add(s1);
put(s1.getAge(),innerList);
}否则{
List innerList=new ArrayList();
innerList.add(s1);
put(s1.getAge(),innerList);
}
}
对于(Map.Entry:Map.entrySet()){
String key=entry.getKey();
List=entry.getValue();
系统输出打印(键+“=”);
用于(学生对象:列表){
系统输出打印(obj+“”);
}
System.out.println();
}
}

}

向我们展示您尝试过的内容,并描述您遇到的任何错误。我没有遇到任何异常。我正在尝试通过添加amount将对象分组为与对象上的状态代码、分支、帐户和创建相同的对象。如果您正在尝试,请包括您尝试过的代码。您是否了解Java8并能够/允许更新为Java8?有了Java8,这个问题很容易解决,而且很容易表达