Всем привет, подскажите, пожалуйста, как решить задачу.
У меня есть List 1 (JSON представление):
[
{
"id": "1",
"title": "one"
},
{
"id": "2",
"title": "two"
},
{
"id": "3",
"title": "three"
},
{
"id": "10",
"title": "ten"
}
]
И List 2 (JSON представление):
[
{
"id": "1",
"title": "one"
},
{
"id": "10",
"title": "ten"
}
]
Результат:
[
{
"id": "2",
"title": "two"
},
{
"id": "3",
"title": "three"
}
]
Если бы я решал данную задачу на JavaScript, одно из решений было бы:
const arrayFilter = (a, a2) => {
return a.reduce((accumulator, currentValue) => {
const isMatches = a2.some((element) => {
return element.id === currentValue.id;
});
if (!isMatches) {
accumulator.push(currentValue);
}
return accumulator;
}, []);
}
console.log(arrayFilter(arr1, arr2));
/*
[ { id: '2', title: 'two' }, { id: '3', title: 'three' } ]
*/
По аналогии решаю данную задачу в Java, используя Stream API. Вопрос в реализации функции some?
package com.example.demo;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class DataObj {
private String id;
private String title;
public DataObj(String id, String title) {
this.id = id;
this.title = title;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "DataObj{" +
"id='" + id + '\'' +
", title='" + title + '\'' +
'}';
}
}
public class Test {
public static void main(String[] args) {
List<DataObj> dataObjs1 = new ArrayList<>();
List<DataObj> dataObjs2 = new ArrayList<>();
DataObj dataObj1 = new DataObj("1", "one");
DataObj dataObj2 = new DataObj("2", "two");
DataObj dataObj3 = new DataObj("3", "three");
DataObj dataObj4 = new DataObj("4", "four");
dataObjs1.add(dataObj1);
dataObjs1.add(dataObj2);
dataObjs2.add(dataObj1);
dataObjs2.add(dataObj3);
dataObjs2.add(dataObj2);
dataObjs2.add(dataObj4);
System.out.println(dataObjs1);
System.out.println(dataObjs2);
List<DataObj> result = dataObjs2.stream().reduce((accumulator, currentValue) -> {
System.out.println(currentValue);
/*
const isMatches = a2.some((element) => {
return element.id === currentValue.id;
});
if (!isMatches) {
accumulator.push(currentValue);
}
*/
return accumulator;
}).stream().collect(Collectors.toList());
System.out.println(result);
}
}