LinkedList包含一组Integer[]
。列表中的每个Integer[]
都有2个数字。
链表的前面部分:
Integer[]{1,2}, Integer[]{2,3}.....
在向Integer[]
添加其他LinkedList
之前,我想检查是否已存在具有相同数据的其他Integer[]
。
Ex:要添加的对象= Integer[] {2,3}
。但这已存在于LinkedList中。
所以我想避免添加这个。
如何验证该对象是否已存在?是否有可以使用的内置功能? contains()
没有做到这一点。
答案 0 :(得分:5)
我认为如果您正在处理坐标,最好使用特定的类,因为var UserSchema = new mongoose.Schema({
clients: [{type: mongoose.Schema.Types.ObjectId, ref: 'User'}]});
var user = new User();
UserIWillPushInto.clients.push(user._id);
仅对两个数字没用,并且会导致Integer[]
和其他contains()
方法出现问题像List
一样。
您最好创建一个.sort()
类,它将包含两个值:
Coordinate
然后你可以使用:
public class Coordinate{
private int x;
private int y;
//getters and setters, constructor
@Override
public boolean equals(Object o) {
if (o == this) return true;
if (!(o instanceof Coord)) {
return false;
}
Coordinate coord = (Coordinate) o;
return coord.x == x &&
coord.y == y;
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + x;
result = 31 * result + y;
return result;
}
}
注意:强>
请注意,使用LinkedList<Coordinate>
实现会更好,它会阻止在坐标集中出现重复,因此我们无需手动检查它。
答案 1 :(得分:2)
嗯,你可以用愚蠢的方式做到:
boolean exists = false;
for (Integer[] integers : list) { // list being the LinkedList
if (Arrays.equals(integers, value)) {
exists = true;
break;
}
}
if (!exists) {
list.add(value);
}
答案 2 :(得分:2)
您可以Stream
使用Set
解决问题,如下所示:
List<Set<Integer>> list = new LinkedList<>();
list.add(Stream.of(1, 2).collect(Collectors.toSet()));
Set<Integer> s1 = new HashSet<>();
s1.add(1);
s1.add(2);
System.out.println(list.contains(s1));
Set<Integer> s2 = new HashSet<>();
s2.add(1);
s2.add(4);
System.out.println(list.contains(s2));
O / P:
真
假
N.B:您可以使用ArrayList
,因为您也可以保留序列。
答案 3 :(得分:0)
如果你真的想用contains()
做这件事(或者无论出于何种原因别无选择),你可以这样实现:
final Integer[] newPair = {2, 3};
final boolean exists = values.contains(new Object()
{
// note that List.contains() javadoc explicitly specifies that
// newPair is used as the receiver not the argument for equals()
@Override
public final boolean equals(final Object listElement)
{
final Integer[] otherPair = (Integer[]) listElement;
return Arrays.equals(newPair, otherPair);
}
});