gpt4 book ai didi

java - 如何检查 ArrayList 的特定元素的唯一性

转载 作者:行者123 更新时间:2023-11-30 11:05:23 26 4
gpt4 key购买 nike

我有一个名为 LineUp 的类,它是一个名为 Event 的类的 ArrayList。事件具有三个值:String Act、Venue(它自己的类)和 int Session。

事件可以这样声明。Event e1 = new Event("Foo Fighters", northstage, "1")LineUp 是一个 ArrayList,Event 是像 e1 这样的元素。

在我的 LineUp 类中,我必须创建一个不变量来检查 ArrayList 队列中包含的每个事件是否具有唯一的 Venue 和 Session。因为这个任务要求我完全遵循规范,所以 Act、Venue 和 Session 的组合是否唯一是无关紧要的,为了遵循规范,我必须/只/确保 Venue 和 Session 是唯一的。

如何检查重复项,但仅检查 ArrayList 中的特定值?

谢谢。

最佳答案

如果您只需要检查是否存在重复项(考虑 field - session 对),您可以创建一个辅助 Pair 类,其中仅包含在此特定情况下重要的属性。然后将事件映射Pair对象,删除重复项并检查大小是否相同。

例如,您可以在 LineUp 中创建一个嵌套类:

class LineUp {
private List<Event> events = new ArrayList<>();

private static final class Pair<U, V> {
final U first;
final V second;

Pair(U first, V second) {
this.first = first;
this.second = second;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Pair)) {
return false;
}
Pair<U, V> that = (Pair<U, V>) o;
return Objects.equals(this.first, that.first)
&& Objects.equals(this.second, that.second);
}

@Override
public int hashCode() {
return Objects.hash(this.first, this.second);
}
}

// rest of the LineUp class
}

然后创建一个方法,如果有重复则返回 false:

public boolean duplicateVenueSessions() {
// Map each Event to a Pair<Venue, Integer> and remove the duplicates
long numDistinct = this.events.stream()
.map(e -> new Pair<>(e.venue, e.session))
.distinct()
.count();
// return false if the original number of events is different from the
// number of distinct events considering only venue and session values
return this.events.size() != numDistinct;
}

如果不能使用 Java 8,您可以使用 Set 代替:

public boolean duplicateVenueSessions() {
Set<Pair<String, Integer>> distinct = new HashSet<>();
for (Event e : this.events) {
Pair<String, Integer> venueSession = new Pair<>(e.venue, e.session);
if (distinct.contains(venueSession)) {
return true;
}
distinct.add(venueSession);
}
return false;
}

关于java - 如何检查 ArrayList 的特定元素的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com