【发布时间】:2015-05-07 22:14:49
【问题描述】:
我必须对数据集应用算法。数据集由两种类型的对象组成,每种对象都有一个特定的 ID。
在这里你可以找到我的第一种对象:
public static List<ObjectType1> getObjectType1() {
List<ObjectType1> myList = new ArrayList<ObjectType1>();
//Creating one ObjectType1 with ID : 1L
ObjectType1 obj1 = new ObjectType1();
obj1.setId(1L);
//Creating one ObjectType1 with ID : 2L
ObjectType1 obj2 = new ObjectType1();
obj2.setId(2L);
//Creating one ObjectType1 with ID : 3L
ObjectType1 obj3 = new ObjectType1();
obj3.setId(3L);
myList.add(obj1);
myList.add(obj2);
myList.add(obj3);
return myList;
}
这是第二种对象:
public static List<ObjectType2> getObjectType2(){
List<ObjectType2> myList = new ArrayList<ObjectType2>();
//Creating one ObjectType2 with ID : 1L
ObjectType2 obj1 = new ObjectType2();
obj1.setId(1L)
//Creating one ObjectType2 with ID : 2L
ObjectType2 obj2 = new ObjectType2();
obj2.setId(2L)
//Creating one ObjectType2 with ID : 4L
ObjectType2 obj3 = new ObjectType2();
obj3.setId(4L)
myList.add(obj1);
myList.add(obj2);
myList.add(obj3);
return myList;
}
我需要做的是对其应用一个简单的算法,但我的主要问题是我一尝试就出现空指针异常。
让我解释一下: 我想对所有的 ObjectType1 进行排序。与 ObjectType2 具有相同 ID 的那些,我保留它们。这意味着如果 ObjectType1 ID(第一个是 Long : 1L)存在于其中一个 ObjectType2 --> Ikeep 它。 如果 ObjecType1 ID 不存在是 ObjectType2 之一 --> 我们不保留它。 如何进行这种简单的“排序”?
到目前为止,我想做的是:
while (valueIterator.hasNext()) {
value = valueIterator.next();
if (value instanceof ObjectType1) {
objType1 = ObjectType1.newBuilder((ObjectType1) value).build();
} else if (value instanceof ObjectType2){
objType2 = ObjectType2.newBuilder((ObjectType2) value).build();
}
}
for(ObjectType1 obj : objs){
if (objType1.getId().equals(objType2.getId())) {
keep(objType1);
} else if (objType1.getId() != objType2.getId()) {
dontKeep(objType1);
}
}
我的空指针异常出现在这里if (objType1.getId().equals(objType2.getId())),因为当我尝试获取 objType2 的 ID '3L' 时,它不存在...
如何在没有数据集的情况下正确进行排序?我找不到正确循环的方法。
感谢您的帮助。
【问题讨论】:
-
只要确保不要在尚未实例化的实例上调用方法。如果您怀疑: if ( myInstance != null ) myInstance.getId();
-
objs的值是多少,并且您使用的循环变量没有任何用途obj -
我通常应该保留 obj1 和 obj2,因为 ID 1L 2L 都存在于 ObjType2 中。并且 obj3 没有保留,因为没有 ID 3L 是 objType2。
标签: java hadoop dictionary mapreduce reduce