I wondering is there any way to filter object array with another object array. Its is to hard to explain but ill try my best
this is my first entity
JavaScript
x
public class MDynamicFieldTypes implements Serializable {
private Long id;
@Enumerated(EnumType.STRING)
private TDynamicFieldCategories category;
private String icon;
private String code;
private String text;
}
this is second entity
JavaScript
public class DynamicFields implements Serializable {
private Long id;
private Instant createdDate;
private Instant lastModifiedDate;
private String value;
private UserProfile createdByUser;
private UserProfile lastModifiedByUser;
private Project project;
private EntityProfile entityProfile;
private UserProfile userProfile;
private MDynamicFieldTypes type;
}
i have two list of this each entities Like this
JavaScript
List<MDynamicFieldTypes> dynamicFieldTypes;
List<DynamicFields> dynamicFields;
And I need to get MDynamicFieldTypes list which not containing in dynamicFields->type List and add fake object to which not containing in the dynamicFields List
as the example
First list like this
JavaScript
List<MDynamicFieldTypes> dynamicFieldTypes = [{id=1,category="A",code=a1,text="ccc"},
{id=2,category="B",code=a2,text="bbbb"},
{id=3,category="C",code=a3,text="cccc"},
{id=4,category="C",code=a4,text="cccc"},
];
Second one like this
JavaScript
List<DynamicFields> dynamicFields=[{id=1,value="xxx",type={id=1,category="A",code=a1,text=b},{id=2,value="yyy";type={id=3,category="C",code=a3,text=b},];
i need get as the result following List
JavaScript
List <MDynamicFieldTypes> notContaing =[{id=2,category="B",code=a2,text="bbbb"},{id=4,category="C",code=a4,text="cccc"}];
Advertisement
Answer
Here is a two step solution
First create a set of all existing types in the dynamicFields
list
JavaScript
Set<MDynamicFieldTypes> existing = dynamicFields.stream().map( f -> { return f.type; } ).collect(Collectors.toSet());
Then use that set to filter out any non-existing type in the dynamicFieldTypes
list
JavaScript
List<MDynamicFieldTypes> missing = dynamicFieldTypes.stream().filter( type -> {
return !existing.contains(type);
}).collect(Collectors.toList());