关于java:Java8-Stream应用场景

8次阅读

共计 860 个字符,预计需要花费 3 分钟才能阅读完成。

利用一:

当须要将 Model 类中的某个属性(例如编号 no)和实体类一一对应时,通过编号就能疾速查找到须要的 Model 实体

model, (k1, k2) -> k1 这里的意思是,如果有 key 雷同的实体,取前一个。

// models 可自定义
List<Model> models;
Map<String, Model> map = models.stream().collect(Collectors.toMap(Model::getNo, model -> model, (k1, k2) -> k1));

如果须要筛选出两个 key 雷同的实体中符合要求的一个,能够这样做:

value -> value, (k1, k2) -> no.equals(k1.getNo()) ? k1 : k2 这里的意思是,如果两个 key 雷同的实体,取和 no 相等 key 对应的 model。

String no;
List<Model> models;
Map<String, Model> map = models.stream().collect(Collectors.toMap(Model::getNo, value -> value, (k1, k2) -> no.equals(k1.getNo()) ? k1 : k2));

利用二:

从 models 列表中获取所有的某个属性值(例子里是 no),造成 Set

List<Model> models;
Set<String> stringSet = models.stream().map(Model::getNo).collect(Collectors.toSet());

利用三:

能够算是利用二的补充,如果咱们须要过滤出 models 中每个编号不蕴含在 Set nos 中的 model,则能够用到 filter 进行过滤,再造成 List

Set<String> nos;
List<Model> models;
List<Model> res = models.stream().filter(model -> !nos.contains(model.getSkuNo())).collect(Collectors.toList());
正文完
 0