从简单的POJO类搜索ArrayList并使用java 8流避免使用空值

时间:2017-05-16 21:03:17

标签: java spring collections

我有一个 ArrayList 类名为 MainList

 public class MainList{

 private String sname;
 private String lname;
 private String address;
 private String branch;
 private String city;

//getter and setter
}

此外,我还有另一个基于此类中的值的pojo类,我将执行Lname,地址,分支和城市的搜索.. 搜索

public class Search{

private String searchSname;

//getter and setter
}

我使用以下代码执行搜索

List<MainList> myList = new ArrayList<>();
//injecting bean to insert data
Search search=new search();
//injecting bean ti insert data
List<MainList> data = myList.stream()
.filter(p-> p.getSname().equals(search.getSearchSname()))
.findFirst()
.orElse(null); 

如果search.getSearchSname()包含任何值但我想制作senario,其中如果search.getSearchSname()的值为null,则返回nullPointerException它将返回MainList的第一个对象,否则根据值执行搜索操作

正如我向您展示一个非常简单的示例,但我想在非常大的数据中实现它,并且有可能没有给出一些输入,我需要在过滤时跳过它我可以通过if条件实现它但是如果任何超出范围的范围然后PLZ帮助我...

2 个答案:

答案 0 :(得分:0)

List<MainList> myList = new ArrayList<>();
Search search = new search();
List<MainList> data;

if (search.getSearchSname() == null) {
    data = myList.get(0);
} else {
    data = myList.stream()
        .filter(p-> p.getSname().equals(search.getSearchSname()))
        .findFirst()
        .orElse(null);
}

答案 1 :(得分:0)

只需在过滤器中添加空检查:

MainList firstMatch = myList.stream()
        .filter(p -> search.getSearchSname() == null
                || p.getSname().equals(search.getSearchSname()))
        .findFirst()
        .orElse(null);