我如何从地图键创建一个集合

时间:2015-12-27 16:37:48

标签: java set treemap

我正在尝试将地图中的密钥提取到集合中。 键是具有2个原始参数的对象, 我怎么做它不重复设置我想要的参数? 下面的代码是方法,param是帐户。 我希望通过acc。

的余额使集合不重复
public static Map<Account, MyLinkedList<Customer>> getAccounts() {
    Map<Account, MyLinkedList<Customer>> AccMap = new TreeMap<>(new AccountComparator());

    System.out.print("Please enter how many accounts: ");
    int accNumber = in.nextInt();
    System.out.println();
    for(int i = 1; i <= accNumber; i++){
        System.out.print("Account # " + i +". Number of customers: ");
        int cusNumber = in.nextInt();
        System.out.println("-----------------------------------------");
        //Account acc = new Account(accountID++, (int)(Math.random()*200-100));

        MyList<Customer> cusList = new MyLinkedList<>();
        cusList = getCustomers(cusNumber);
        AccMap.put(new Account(accountID++, (int)(Math.random()*200-100)), (MyLinkedList<Customer>) cusList);       
    }

    System.out.println(AccMap.toString());
    return AccMap;
}

2 个答案:

答案 0 :(得分:0)

地图有一个名为keyset的方法,它将所有键作为一组返回到地图。由于映射的工作方式,它在键上已经是唯一的(在您的情况下是Account对象)。但是,它使用帐户比较器和等于方法检查唯一性。

如果您的AccountComparator课程仅比较accountID,则应该提供您想要的内容。

如果您的比较器包含两个参数,那么您可能会遇到问题。

答案 1 :(得分:0)

为什么不迭代从地图上调用的keySet方法获得的集合,然后在迭代时删除重复项?或者你甚至可以迭代从entrySet方法获得的集合,并在迭代时过滤掉重复项,并将遗骸保存在另一个集合中。我认为没有更简单的方法:/