0
/**
 * This method should compare two Sets of Integers and return a new 
 * Set of Integers that represent all of the matching numbers.
 * 
 * For example, if the lotteryNumbers are (4, 6, 23, 34, 44, 45) and
 * the userNumbers are (4, 18, 22, 24, 35, 45) then the returned Set
 * of Integers should be (4, 45)
 * 
 * @param lotteryNumbers the lottery numbers that were randomly generated.
 * @param userNumbers the user picked numbers that were picked in the console.
 * @return Set of matched numbers
 */
public Set<Integer> playLottery (Set<Integer> lotteryNumbers, Set<Integer> userNumbers)  {
    Set<Integer> listOfRandom = new HashSet<Integer>(lotteryNumbers);
    listOfRandom.equals(lotteryNumbers);
    listOfRandom.addAll(lotteryNumbers);

    Set<Integer> s = new HashSet<Integer>(userNumbers); 
    s.equals(userNumbers);
    s.addAll(userNumbers);

    Set<Integer> e = new HashSet<Integer>(); 

    for (Integer integer : userNumbers) {
        if (userNumbers.equals(lotteryNumbers));
        userNumbers.remove(lotteryNumbers);
    }
    return userNumbers;
}

截至目前,它只返回所有用户编号。我假设 remove() 方法将删除返回的任何重复值。我需要这个来通过我的单元测试。

4

3 回答 3

2

retainAll()就是你要找的。

Set<Integer> lotteryNumbers = new TreeSet<Integer>();
// ... Populate it with 4, 6, 23, 34, 44, 45 
Set<Integer> userNumbers = new TreeSet<Integer>();
// ... Populate it with 4, 18, 22, 24, 35, 45
userNumbers.retainAll(lotteryNumbers);
// userNumbers is now just (4, 45)
于 2013-09-19T02:49:08.347 回答
1

您还可以使用Apache Commons - Collections进行类似的操作。具体来说,您可以使用 CollectionUtils.intersection()

CollectionUtils.intersection(Arrays.asList(4,6,23,34,44,45),Arrays.asList(4,18,22,24,35,45)) // returns collection with 4,45

泛型版本位于http://sourceforge.net/projects/collections/

于 2013-09-19T03:43:10.910 回答
1

值得庆幸的是,Java 提供了一种方法来准确地调用retainAll(). 为避免破坏任何一个原始集合,请执行以下操作:

Set<String> intersection = new HashSet<String>(lotteryNumbers);
intersection.retainAll(userNumbers);
return intersection;
于 2013-09-19T02:50:35.910 回答