![](/img/trans.png)
[英]How to compare two lists of custom objects for some properties using streams in Java?
[英]Using java streams to compare two lists of objects with fields
我需要使用流将两个对象列表与其字段值进行比较
例如
List<Object> originalObjectList
List<Object> modifiedObjectList
我需要在字段级别从两个列表中找到对象的差异,并获取如下差异列表
我正在尝试这种方法
originalObjectList
.stream()
.map(originalObject -> modifiedObjectList
.stream()
.map(modifiedObject -> findDifferences(originalObject.getField1(), modifiedObject.getField1())
.collect(// not understanding how to collect the result returned from findDifferences)
//Method
Result findDifferences(String originalValue, String modifiedValue){
Result result = new Result();
if(StringUtils.isEmpty(originalValue) && StringUtils.isNotEmpty(modifiedValue)){
result.setStatus("ADDED");
result.setValue(modifiedValue);
}
else if(StringUtils.isNotEmpty(originalValue) && StringUtils.isEmpty(modifiedValue)){
result.setStatus("DELETED");
result.setValue(originalValue);
}
else if(!originalValue.equals(modifiedValue)){
result.setStatus("MODIFIED");
result.setValue(modifiedValue);
}
return result;
}
结果应包含字段的值和字段的状态,如“已删除”、“已修改”或“已添加” 请建议是否有更好的方法来实现这一目标? 我是 Java 流的新手
像这样的东西。 随意问的问题。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class App6 {
public static final String ADDED = "ADDED";
public static final String DELETED = "DELETED";
public static final String MODIFIED = "MODIFIED";
public static final String NOT_MODIFIED = "NOT_MODIFIED";
public static void main(String[] args) {
List<A> originalObjectList = Arrays.asList(new A("a"), new A(""), new A("a"), new A("a"));
List<A> modifiedObjectList = Arrays.asList(new A("a"), new A("b"), new A("b"), new A(""));
List<Result> results = IntStream
.range(0, originalObjectList.size())
.mapToObj(i -> {
A original = originalObjectList.get(i);
A modified = modifiedObjectList.get(i);
return compare(original, modified);
})
.collect(Collectors.toList());
System.out.println(results);
}
public static Result compare(A or, A mod) {
if (or == null || mod == null) {
throw new IllegalArgumentException("Comparable objects should not be null");
}
if (or.field == null || mod.field == null) {
throw new IllegalArgumentException("Comparable fields of objects should not be null");
}
if (or.field.equals(mod.field)) {
return new Result(NOT_MODIFIED, or.field);
} else if (or.field.isEmpty() && !mod.field.isEmpty()) {
return new Result(ADDED, mod.field);
} else if (!or.field.isEmpty() && mod.field.isEmpty()) {
return new Result(DELETED, or.field);
} else {
return new Result(MODIFIED, mod.field);
}
}
}
class A {
String field;
public A(String field) {
this.field = field;
}
}
class Result {
String status;
String value;
public Result(String status, String value) {
this.status = status;
this.value = value;
}
@Override
public String toString() {
return "Result{" +
"status='" + status + '\'' +
", value='" + value + '\'' +
'}';
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.