📅  最后修改于: 2020-03-27 15:23:18             🧑  作者: Mango
下面是有效地从满足谓词条件的列表中删除元素的方法:
p ==>谓词,指定条件 l ==>列表,从中删除元素
// Java展示移除null
// 使用迭代器和谓词元素
import java.util.function.Predicate;
import java.util.*;
class GFG {
// 移除所有的null元素
public static List
removeNullUsingIterator(List l, Predicate p)
{
// 创建一个迭代器
Iterator itr = l.iterator();
// 找到并移除null
while (itr.hasNext()) {
// 获取下一个元素
T t = itr.next();
// 检查谓词Predicate条件
if (p.test(t)) {
// 如果条件满足,则移除
itr.remove();
}
}
// 返回null
return l;
}
public static void main(String[] args)
{
// 创建l,包含null
List l = new ArrayList<>(
Arrays.asList("芒果",
null,
"for芒果",
null,
"A computer portal"));
// 打印list
System.out.println("List包含了null: " + l);
// 创建谓词条件
Predicate isNull = item -> Objects.nonNull(item);
// 移除null
l = removeNullUsingIterator(l, isNull);
// 打印list
System.out.println("List在null被移除之后: " + l);
}
}
输出:
List包含了null: [芒果, null, for芒果, null, A computer portal]
List在null被移除之后: [芒果, for芒果, A computer portal]
在此方法中,包含要删除元素的集合用于从原始l中删除那些元素。它要求使用谓词条件创建具有所需元素的集合。完成此操作后,将在原始l中搜索此集合,并删除其所有实例。
// Java展示使用List.removeAll()从list中删除所有的10
import java.util.function.Predicate;
import java.util.*;
class GFG {
// 使用谓词Predicate删除元素
public static List
removeElements(List l, Predicate p)
{
// 创建collection,使用Predicate
Collection collection = new ArrayList<>();
for (T t : l) {
if (p.test(t)) {
collection.add(t);
}
}
// 打印list
System.out.println("要被删除的Collection: " + collection);
// 使用List.removeAll()删除10
l.removeAll(collection);
// 返回list
return l;
}
public static void main(String[] args)
{
// 创建list,包含null
List l = new ArrayList<>(
Arrays.asList("1", "10", "15", "10", "12", "5", "10", "20"));
// 打印list
System.out.println("原始list: " + l);
// 创建一个谓词条件Predicate,检查10
Predicate is10 = i -> (i == "10");
// 移除谓词Predicate
l = removeElements(l, is10);
// 打印list
System.out.println("更新后的List: " + l);
}
}
输出:
原始list: [1, 10, 15, 10, 12, 5, 10, 20]
要被删除的Collection: [10, 10, 10]
更新后的List: [1, 15, 12, 5, 20]
Stream.filter()方法可以在Java 8中使用,该方法返回由与给定谓词条件匹配的元素组成的流。
// Java从一个list当中移除null
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.*;
class GFG {
// 使用谓词Predicate移除元素
public static List
removeElements(List l, Predicate p)
{
// 使用Java Stream移除nulls
// 在lambda表达式中使用谓词Predicate条件
l = l.stream()
.filter(p)
.collect(Collectors.toList());
// 返回list
return l;
}
public static void main(String[] args)
{
// 创建一个list,包含null
List l = new ArrayList<>(
Arrays.asList("芒果",
null,
"for芒果",
null,
"A computer portal"));
// 打印list
System.out.println("list包含null: " + l);
// 创建一个谓词条件,检查null
Predicate isNull = i -> (i == null);
// 移除谓词Predicate
l = removeElements(l, isNull);
// 打印list
System.out.println("在null被移除List之后: " + l);
}
}
输出:
list包含null: [芒果, null, for芒果, null, A computer portal]
在null被移除List之后: [芒果, for芒果, A computer portal]
顾名思义,这是删除满足给定谓词的所有元素的直接方法。
// Java8,从list当中移除元素
import java.util.function.Predicate;
import java.util.*;
class GFG {
// 使用谓词移除元素
public static List
removeElements(List l, Predicate p)
{
// 使用removeIf() 和谓词,移除元素
l.removeIf(x -> p.test(x));
// 返回list
return l;
}
public static void main(String[] args)
{
// 创建list,包含null
List l = new ArrayList<>(
Arrays.asList("芒果",
null,
"for芒果",
null,
"A computer portal"));
// 打印list
System.out.println("list包含null: " + l);
// Creating a Predicate condition checking for null
Predicate isNull = i -> (i == null);
// 使用Predicate谓词移除元素
l = removeElements(l, isNull);
// 打印list
System.out.println("list在null被移除之后: " + l);
}
}
输出:
list包含null: [芒果, null, for芒果, null, A computer portal]
list在null被移除之后: [芒果, for芒果, A computer portal]