У меня есть 2 объекта массива, первый - составной, а другой - простой массив объектов, основанный на некотором сравнении, если совпадение найдено, создайте новый список. Это будет отфильтрованный список, основанный на условиях. Я сделал это, используя версию java 1.7
, однако искал руководство, если этого можно достичь с помощью меньшего количества кода, используя java-8
.
Вот мой код, который создает новый список на основе условного фильтра
public static void main(String[] args) throws CloneNotSupportedException {
String[] accountOid = {"1","2","3","4","5","6","7","8"};
AccountHoldCompositeObj[] accts = prepare();
ArrayList<AccountHoldCompositeObj> list = new ArrayList<AccountHoldCompositeObj>();
for (int i = 0; i < accountOid.length; i++) {
for (int j = 0; j < accts.length; j++) {
ObjectId oid = new ObjectId(accountOid[i]);
if (oid.equals(accts[j].getAccountOid())) {
AccountHoldCompositeObj anAccount = (AccountHoldCompositeObj) accts[j].clone();
list.add(anAccount);
break;
}
}
}
list.stream().forEach(s->System.out.println(s));
}
private static AccountHoldCompositeObj[] prepare() {
AccountHoldCompositeObj[] valArr = new AccountHoldCompositeObj[5];
int k =10;
for (int i=0;i<50;i++){
AccountHoldCompositeObj create = new AccountHoldCompositeObj();
create.setAccountId(Integer.toString(k));//some more elements
create.setAccountOid(new ObjectId(i));
valArr[i] = create;
k++;
}
return valArr;
}
Я пытался преобразовать массив в поток, а затем использовал фильтр, но почему-то не смог сравнить ровно 2 разных элемента, то есть:
accountOid[i]
из accountOid
массив (простой массив)
accts[j].getAccountOid()
из AccountHoldCompisiteObj
массив (составной
массив)