参考:java – ifPresent Stream的其他方法
首先,获取对象数组某个属性最小值那条记录
bookList.stream().min(Comparator.comparing(Book::getSort)).get();
这样就拿到了bookList的item中sort值最小的那条记录了
Book类
private String id;
private String name;
private Integer sort;
扩展,我有一个需求是 前台传入数据要求校验只允许sort最小的值,name为空,其他都不允许
。我的思路就是先找到sort值最小的item,然后遍历其他item,判断name不能为空。
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author liweifang
* @Title: Test01
* @Description: 校验思路
* @date 2020/11/20 9:28
*/
public class Test01 {
public static void main(String[] args) {
List<Book> bookList = new ArrayList<Book>();
Book b1 = new Book();
b1.setId("1");
b1.setName("1");
b1.setSort(1);
bookList.add(b1);
Book b0 = new Book();
b0.setId("0");
b0.setName("0");
b0.setSort(0);
bookList.add(b0);
Book b2 = new Book();
b2.setId("2");
b2.setName("2");
b2.setSort(2);
bookList.add(b2);
//获取sort值最小的那条记录
Book book = bookList.stream().min(Comparator.comparing(Book::getSort)).get();
AtomicBoolean isblank = new AtomicBoolean(false);
StringBuilder msg = new StringBuilder("");
bookList.stream().filter( x -> x.getSort()!= book.getSort()).findFirst().map(p -> {
if(null == p.getName() || "".equals(p.getName())) {
isblank.set(true);
msg.append("id为" + p.getId() + "的名称不能为空");
}
return msg;
});
if(isblank.get()) {
System.out.println(msg);
} else {
System.out.println("检验通过");
}
}
}
class Book {
private String id;
private String name;
private Integer sort;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
}
我也不知道为什么我总有这种奇奇怪怪的需求巴拉巴拉的,烦,记录下吧万一下次又有呢