比较两种不同类型的 ArrayLists 以找到共同的数据
Compare two different type of ArrayLists to find common data
我有两个 ArrayList。 Arraylist one 存储包含不同属性的对象,其中一个是整数 arraylist。
数组列表二是整数数组列表。我想将 Arraylist 2 与存储在 arraylist one 中的整数 arraylist 进行比较。为了让您更容易理解:
数组列表 1 :
- 属性 1
- 属性 2
- 整数数组列表
ArrayList2/Integer 数组列表
我已经尝试了几个小时但没有成功。这是我的想法:
我有这两个 ArrayLists:
ArrayList<LottoTicket> ticketList = new ArrayList<>(); //ArrayList 1
ArrayList<Integer> drawNums = new ArrayList(); //ArrayList 2
现在 ArrayList 1 存储对象 LotteryTicket,它有一个名为 'set' 的整数 ArrayList,它存储 5 个彩票号码。
我的想法是将 'set' 数组列表与 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
(s) 的共同项。您可以 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
s 转换为 Set
s 以加快查找速度(尽管这对于只有五个数字应该没有太大影响)。
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);
}
我有两个 ArrayList。 Arraylist one 存储包含不同属性的对象,其中一个是整数 arraylist。
数组列表二是整数数组列表。我想将 Arraylist 2 与存储在 arraylist one 中的整数 arraylist 进行比较。为了让您更容易理解:
数组列表 1 :
- 属性 1
- 属性 2
- 整数数组列表
ArrayList2/Integer 数组列表
我已经尝试了几个小时但没有成功。这是我的想法:
我有这两个 ArrayLists:
ArrayList<LottoTicket> ticketList = new ArrayList<>(); //ArrayList 1
ArrayList<Integer> drawNums = new ArrayList(); //ArrayList 2
现在 ArrayList 1 存储对象 LotteryTicket,它有一个名为 'set' 的整数 ArrayList,它存储 5 个彩票号码。
我的想法是将 'set' 数组列表与 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
(s) 的共同项。您可以 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
s 转换为 Set
s 以加快查找速度(尽管这对于只有五个数字应该没有太大影响)。
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);
}