使用java8筛选/删除所有元素的所有空值
我试图了解Java 8的功能并使用: 下面我想从列表中筛选空值 我知道使用使用java8筛选/删除所有元素的所有空值,java,java-8,Java,Java 8,我试图了解Java 8的功能并使用: 下面我想从列表中筛选空值 我知道使用.filter(n->n!=null)我们可以从列表中筛选null。 但我想知道,如果任何元素null,该怎么办。 我还知道,我们可以简单地像.filter(n->n.empName!=null)那样做,但是如果我有许多字段,在过滤时类型未知,该怎么办呢 我们可以在过滤器中循环列表并检查n个元素是否为空吗?或者请引导我一个方法。此外,当我们将列表转换为null值的映射时,它将抛出错误。 我们如何使用java8实现这一点 E
.filter(n->n!=null)
我们可以从列表中筛选null
。
但我想知道,如果任何元素null
,该怎么办。
我还知道,我们可以简单地像.filter(n->n.empName!=null)
那样做,但是如果我有许多字段,在过滤时类型未知,该怎么办呢
我们可以在过滤器中循环列表并检查n个元素是否为空吗?或者请引导我一个方法。此外,当我们将列表转换为null
值的映射时,它将抛出错误。
我们如何使用java8实现这一点
Employee[] arrayOfEmps = {
new Employee(1, "Jeff Bezos", 100000.0),
new Employee(5, "Vijay", 700000.0),
new Employee(2, "Bill Gates", 200000.0),
new Employee(4, "Shweta Oza", 500000.0),
new Employee(0, null, 400000.0),
null,
new Employee(3, "Mark Zuckerberg", 300000.0)
};
//Array -> Stream
Stream<Employee> streamEmp = Stream.of(arrayOfEmps);
streamEmp.forEach(s->System.out.println(s.empID+" "+s.empName+" "+s.salary));
//Array -> List
List<Employee> empList = Arrays.asList(arrayOfEmps);
empList.forEach(System.out::println);
//List -> Stream
empList.stream();
Map<Integer, String> map = new HashMap<Integer, String>();
for(Employee e : empList) {
map.put(e.empID, e.empName);
}
System.out.println(map);
Map<Integer, String> map8 = new HashMap<Integer, String>();
map8 = empList.stream().filter(n->n!=null).collect(Collectors.toMap(Employee::getEmpID, Employee::getEmpName));
System.out.println(map8); //error
Employee[]arrayOfEmps={
新员工(1名,“杰夫·贝佐斯”,100000.0),
新员工(5名,“Vijay”,700000.0),
新员工(2名,“比尔·盖茨”,200000.0),
新员工(4名,“Shweta Oza”,500000.0),
新员工(0,空,400000.0),
无效的
新员工(3名,“马克·扎克伯格”,300000.0)
};
//数组->流
Stream streammp=流(arrayOfEmps);
streammp.forEach(s->System.out.println(s.empID+“”+s.empName+“”+s.salary));
//数组->列表
List empList=Arrays.asList(arrayOfEmps);
empList.forEach(System.out::println);
//列表->流
empList.stream();
Map Map=newhashmap();
for(员工e:员工列表){
map.put(e.empID,e.empName);
}
系统输出打印项次(map);
Map map8=新的HashMap();
map8=empList.stream().filter(n->n!=null).collect(Collectors.toMap(Employee::getEmpID,Employee::getEmpName));
系统输出打印LN(map8)//错误
我这样做只是为了去掉null
List dd=empList.stream().filter(currentEmp->
{
if(currentEmp==null)
{
返回false;
}
如果(currentEmp.getEmpName()==null)
{
返回false;
}
如果(currentEmp.getEmpID()==0){
返回false;
}
如果(currentEmp.getSalary()==0){
返回false;
}
返回true;
//……等等。
}).collect(Collectors.toList());
对于(int i=0;ifilter()
将lambda表达式作为参数,只要返回布尔值,就可以在其中执行任何操作
例如:
empList.stream()
{
if(currentEmp==null)
{
返回false;
}
如果(currentEmp.getName().trim()等于(“”)
{
返回false;
}
//……等等。
}).collect(Collectors.toList());
关于第二个问题,您能提供错误吗?filter()
将lambda表达式作为参数,您可以在其中执行任何操作,只要返回一个布尔值
例如:
empList.stream()
{
if(currentEmp==null)
{
返回false;
}
如果(currentEmp.getName().trim()等于(“”)
{
返回false;
}
//……等等。
}).collect(Collectors.toList());
关于第二个问题,你能提供错误吗
我想知道,如果任何元素为null,该怎么办
你通常会跳过它
若在筛选时有许多类型未知的字段,我们可以在筛选器中循环列表并检查n个元素是否为空
由于java是类型化语言,您将提前获得有关字段类型的信息
过滤的概念是包含或排除部分数据(显然是从更多数据中),并且由于所有数据都是java中的对象,因此可以毫无问题地检查null(前置词除外)
我将使用您的示例进行一些修改:
Employee[] arrayOfEmps = {
new Employee(1, "Jeff Bezos", 100000.0),
new Employee(5, "Vijay", 700000.0),
new Employee(2, "Bill Gates", 200000.0),
new Employee(4, "Shweta Oza", 500000.0),
new Employee(0, null, 400000.0),
null, // note here
new Employee(3, "Mark Zuckerberg", 300000.0)
};
因此,基本上,过滤空值需要做的是:
x.filter(Objects::nonNull).x..
或x.filter(val->val!=null).x..
您的示例大致如下所示:
import java.util.*;
import java.util.stream.*;
public class Main
{
public static void main(String[] args) {
Employee[] arrayOfEmps = {
new Employee(1, "Jeff Bezos", 100000.0),
new Employee(5, "Vijay", 700000.0),
new Employee(2, "Bill Gates", 200000.0),
new Employee(4, "Shweta Oza", 500000.0),
new Employee(0, null, 400000.0),
null, // note here
new Employee(3, "Mark Zuckerberg", 300000.0)
};
List<Employee> result = Arrays.asList(arrayOfEmps).stream().filter(Objects::nonNull).collect(Collectors.toList());
System.out.println(result);
}
}
class Employee {
private int id;
private String name;
private double salary;
Employee(int id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
@Override
public String toString() {
return "[id: " + this.id +" name: " + this.name + "salary: "+ this.salary + "]";
}
}
import java.util.*;
导入java.util.stream.*;
公共班机
{
公共静态void main(字符串[]args){
员工[]arrayOfEmps={
新员工(1名,“杰夫·贝佐斯”,100000.0),
新员工(5名,“Vijay”,700000.0),
新员工(2名,“比尔·盖茨”,200000.0),
新员工(4名,“Shweta Oza”,500000.0),
新员工(0,空,400000.0),
null,//注意这里
新员工(3名,“马克·扎克伯格”,300000.0)
};
列表结果=Arrays.asList(arrayOfEmps).stream().filter(Objects::nonNull).collect(Collectors.toList());
系统输出打印项次(结果);
}
}
班级员工{
私有int-id;
私有字符串名称;
私人双薪;
员工(整数id、字符串名称、双倍工资){
this.id=id;
this.name=名称;
这个。薪水=薪水;
}
@凌驾
公共字符串toString(){
返回“[id:+this.id+”名称:+this.name+”薪资:+this.salary+”];
}
}
我想知道,如果任何元素为null,该怎么办
你通常会跳过它
若在筛选时有许多类型未知的字段,我们可以在筛选器中循环列表并检查n个元素是否为空
由于java是类型化语言,您将提前获得有关字段类型的信息
c
import java.util.*;
import java.util.stream.*;
public class Main
{
public static void main(String[] args) {
Employee[] arrayOfEmps = {
new Employee(1, "Jeff Bezos", 100000.0),
new Employee(5, "Vijay", 700000.0),
new Employee(2, "Bill Gates", 200000.0),
new Employee(4, "Shweta Oza", 500000.0),
new Employee(0, null, 400000.0),
null, // note here
new Employee(3, "Mark Zuckerberg", 300000.0)
};
List<Employee> result = Arrays.asList(arrayOfEmps).stream().filter(Objects::nonNull).collect(Collectors.toList());
System.out.println(result);
}
}
class Employee {
private int id;
private String name;
private double salary;
Employee(int id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
@Override
public String toString() {
return "[id: " + this.id +" name: " + this.name + "salary: "+ this.salary + "]";
}
}
class Employee {
public Employee(String name) {
Objects.requireNonNull(name);
public Employee(@NonNull String name) {
private final String name;
public Employee(String name) {
this.name = name; // Still name might be null, so:
Objects.requireNonNull(name);