繁体   English   中英

比较两种不同类型的ArrayList以查找公用数据

[英]Compare two different type of ArrayLists to find common data

我有两个ArrayLists。 Arraylist用于存储包含不同属性的对象,其中之一是整数arraylist。

Arraylist 2是一个整数arraylist。 我想将Arraylist 2与存储在arraylist 1中的整数arraylist进行比较。 为了使您更容易理解:

ArrayList1:

  • 属性1
  • 属性2
  • 整数数组列表

ArrayList2 /整数Arraylist

我已经尝试了几个小时才能做到这一点,但没有成功。 这是我的主意:

我有这两个ArrayLists:

ArrayList<LottoTicket> ticketList = new ArrayList<>(); //ArrayList 1

ArrayList<Integer> drawNums = new ArrayList(); //ArrayList 2

现在,ArrayList 1存储对象LotteryTicket,该对象具有一个名为“ set”的整数ArrayList,该整数存储了5个彩票号码。

这是我将“设置”数组列表与drawNums数组列表进行比较的想法:

for(LottoTicket l : ticketList)
{        
  if(l.getSet().contains(drawNums.get(1)))
  {
     System.out.println("1 number matches");
  } 
  else 
  {
     System.out.println("No matches");
  }
}

但这似乎不是一个好主意! 任何帮助将不胜感激,我希望这也会对其他人有所帮助!

谢谢

我认为您正在寻找两个Collection的共同点。 您可以使用List.retainAll(Collection) 从该列表删除所有未包含在指定集合中的元素,例如

List<Integer> al = new ArrayList<>(l.getSet());
al.retainAll(drawNums);
System.out.printf("%d number(s) match.%n", al.size());

而不是检查抽奖号码列表中的特定位置 ,您只需检查列表是否contains玩家选择的号码-毕竟,号码的顺序无关紧要。 然后,只需count包含的数字即可。

另外,您可以将List转换为Set以加快查找速度(尽管这对于仅五个数字来说并没有多大关系)。

Set<Integer> numsAsSet = new HashSet<>(drawNums);
for (LottoTicket ticket : ticketList) {
    long matches = ticket.getSet().stream()
                                  .filter(x -> numsAsSet.contains(x))
                                  .count();
    System.out.println("Number of matches: " + matches);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM