Ror*_*ter 34 java filtering list object
我有两个数组列表,例如
List<Date> a;
contains : 10/10/2014, 10/11/2016
List<Date> b;
contains : 10/10/2016
Run Code Online (Sandbox Code Playgroud)
如何在列表之间进行检查a,b以便b返回缺少的值?例如10/10/2014
Pab*_*ruz 46
您可以将它们转换为Set集合,并对Set它们执行操作.
像这样:
Set<Date> ad = new HashSet<Date>(a);
Set<Date> bd = new HashSet<Date>(b);
ad.removeAll(bd);
Run Code Online (Sandbox Code Playgroud)
Den*_*ich 26
如果您只想在b中找到缺失值,则可以执行以下操作:
List toReturn = new ArrayList(a);
toReturn.removeAll(b);
return toReturn;
Run Code Online (Sandbox Code Playgroud)
如果要查找列表中存在的值,可以执行两次上码.更改列表.
Mil*_*eto 11
您可以按Java 8 Stream库使用过滤器
List<String> aList = Arrays.asList("l","e","t","'","s");
List<String> bList = Arrays.asList("g","o","e","s","t");
List<String> result = aList.stream().filter(aObject -> {
return bList.contains(aObject);
}).collect(Collectors.toList());
//or more reduced without curly braces and return
List<String> result2 = aList.stream().filter(aObject ->
!bList.contains(aObject)).collect(Collectors.toList());
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)
结果:
[e, t, s]
Run Code Online (Sandbox Code Playgroud)
您可以使用Apache Commons Collections 4.0中的CollectionUtils:
new ArrayList<>(CollectionUtils.subtract(a, b))
Run Code Online (Sandbox Code Playgroud)
我看上去很相似,但我想在两个列表中都有所不同(两个列表之间的元素不常见):
假设我有:
List<String> oldKeys = Arrays.asList("key0","key1","key2","key5");
List<String> newKeys = Arrays.asList("key0","key2","key5", "key6");
Run Code Online (Sandbox Code Playgroud)
我想知道已添加了哪个键,而删除了哪个键,即我想获取(key1,key6)
使用org.apache.commons.collections.CollectionUtils
List<String> list = new ArrayList<>(CollectionUtils.disjunction(newKeys, oldKeys));
Run Code Online (Sandbox Code Playgroud)
结果
[key1,key6]
小智 6
首先将列表转换为集合。
// create an empty set
Set<T> set = new HashSet<>();
// Add each element of list into the set
for (T t : list)
set.add(t);
Run Code Online (Sandbox Code Playgroud)
您可以使用Sets.difference(Set1, Set2),它返回 Set1 中存在的额外项目。
您可以使用Sets.difference(Set2, Set1),它返回 Set2 中存在的额外项目。
使用 Stream API,您可以执行以下操作:
List<String> aWithoutB = a.stream()
.filter(element -> !b.contains(element))
.collect(Collectors.toList());
List<String> bWithoutA = b.stream()
.filter(element -> !a.contains(element))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)