Duang,最近搭建了一个自己的博客小破站,欢迎各位小伙伴来访吖:
ares-coder-blog-portal
https://www.ares-stack.cn/blog_service/#/game
直接上代码,比较实在。
public Class A{
private Long id;
private String userName;
....省略get和set方法
在List<A>中,查找 userName 为 "小明" 的对象 A。
在java8中,我们可以这么玩
1,查找集合中符合条件的第一个对象,如果可以明确条件只能匹配一个,使用上 findFirst(),性能更好。
Optional<A> firstA= AList.stream()
.filter(a -> "小明".equals(a.getUserName()))
.findFirst();
关于Optional,java API中给了解释。
A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value.
一个容器对象,它可能包含也可能不包含非空值。如果存在一个值,isPresent()将返回true, get()将返回值。
Optional 是 Java 语言的有益补充 —— 它旨在减少代码中的 NullPointerExceptions,虽然还不能完全消除这些异常。
它也是精心设计,自然融入 Java 8 函数式支持的功能。
总的来说,这个简单而强大的类有助于创建简单、可读性更强、比对应程序错误更少的程序。
理解、学习与使用 Java 中的 Optional - OSCHINA - 中文开源技术交流社区
Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
Optional 类的引入很好的解决空指针异常。
Java 8 Optional 类 | 菜鸟教程
所以,我们可以这样子使用,firstA.isPresent()作为判断
if (firstA.isPresent()) {
A a = firstA.get(); //这样子就取到了这个对象。
else {
//没有查到的逻辑
还可以使用
ifPresent 用于对过滤出的数据如果存在。如果经过过滤条件后,有数据的话就可以进行修改。
Optional<A> firstA= AList.stream()
.filter(a -> "小明".equals(a.getUserName()))
.findFirst()
.ifPresent(a -> {
a.setUserName("明明");
2,如果想返回集合呢。可以使用这个(此处即:返回经过过滤后的集合)
List<A> aList= AList.stream()
.filter(a -> "小明".equals(a.getUserName()))
.collect(Collectors.toList());
扩展:如去掉空
//去掉名称为空的
List<A> aList = AList.stream()
.filter(a-> StringUtil.isNotEmpty(a.getName()))
.collect(Collectors.toList());
3,抽取对象中所有的id的集合
//map(A::getId) 中的 A 为实体类
List<Long> idList = AList.stream()
.map(A::getId)
.collect(Collectors.toList());
4,返回map
//A 为实体类
Map<Long, A> map = AList.stream()
.filter(a-> StringUtil.isNotEmpty(a.getName()))
.collect(Collectors.toMap(A::getId, a -> a));
.collect(Collectors.groupingBy(实体::get字段))
参考来源:
java8 stream ,filter 等功能代替for循环 - 依米艳 - 博客园
直接上代码,比较实在。对象Apublic Class A{ private Long id; private String userName; ....省略get和set方法 }在List<A>中,查找 userName 为 "小明" 的对象 A。在java8中,我们可以这么玩1,查找集合中符合条件的第一个对象,如果可以明确条...
Optional类是Java8为了解决null值判断问题,借鉴google guava类库的Optional类而引入的一个同名Optional类,使用Optional类可以避免显式的null值判断(null的防御性检查),避免null导致的NPE(NullPointerException)。
我们来看一段代码:
public static String getGender(Student student)
if(null == student)
List<String> lowCaloricDishesName = dishes.stream()
.filter(d -> d.getCalories() < 400)
.sorted(Comparator.comparing(Dish::getCalories))
.map(Dish::getName)
.collect(Collectors.toLis
List<Student> studentList = list.stream().filter(s->s.getGender().equals("1")).collect(Collectors.toList());
2 多条件筛选
筛选出性别为男并且身高为1米8以上的学生。
List<Student> studentList = list.stream().filter(s->s.getGender().equals
Java 8 中的 Stream API 提供了一种非常便利的方式来对集合进行操作,其中 filter() 方法用于过滤集合中不满足条件的元素。多个 filter() 方法可以连续使用,以便对集合进行多重过滤。
例如,假设有一个字符串列表,我们可以使用如下代码来过滤出长度大于等于3且以“a”开头的字符串:
List<String> strings = Arrays.asList("apple", "banana", "cat", "dog", "air", "bag");
List<String> filteredStrings = strings.stream()
.filter(s -> s.startsWith("a"))
.filter(s -> s.length() >= 3)
.collect(Collectors.toList());
System.out.println(filteredStrings); // [apple, air]
在这个例子中,我们使用两个 filter() 方法,第一个用于过滤以“a”开头的字符串,第二个用于过滤长度大于等于3的字符串。最终,我们使用 collect() 方法将过滤后的结果收集到一个列表中。
另外,Java 8 中还提供了 Optional 类,可以用于避免 null 值的问题。当我们使用 Optional 类时,可以使用 orElse() 或 orElseGet() 方法来指定默认值,以避免出现空指针异常。
例如,假设有一个方法用于查询某个用户的姓名,但如果该用户不存在,则返回 null。我们可以使用 Optional 类来避免 null 值的问题:
Optional<String> name = getUser().map(User::getName);
String result = name.orElse("Unknown");
System.out.println(result);
在这个例子中,如果 getUser() 方法返回一个存在的用户,则使用 map() 方法获取该用户的姓名并存储在 Optional 对象中。如果该用户不存在,则 name 对象将为空。最后,我们使用 orElse() 方法指定默认值“Unknown”,以避免出现空指针异常。