使用java8筛选/删除所有元素的所有空值

使用java8筛选/删除所有元素的所有空值,java,java-8,Java,Java 8,我试图了解Java 8的功能并使用: 下面我想从列表中筛选空值 我知道使用.filter(n->n!=null)我们可以从列表中筛选null。 但我想知道,如果任何元素null,该怎么办。 我还知道,我们可以简单地像.filter(n->n.empName!=null)那样做,但是如果我有许多字段,在过滤时类型未知,该怎么办呢 我们可以在过滤器中循环列表并检查n个元素是否为空吗?或者请引导我一个方法。此外,当我们将列表转换为null值的映射时,它将抛出错误。 我们如何使用java8实现这一点 E

我试图了解Java 8的功能并使用: 下面我想从列表中筛选空值 我知道使用
.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;i
filter()
将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);