Optional和Stream流在工作中的案例

文章介绍了如何利用Java中的Optional类来判断null并避免空指针异常,以及使用Steam流进行更高效的过滤操作。具体场景是在数据处理中,通过findById获取Item对象,然后更新CsoItem的字段,过程中涉及到多层数据结构的默认值查找,如ItemVendorFact和VendorFact,默认值通过filter和findFirst方法从列表中筛选得出。
摘要由CSDN通过智能技术生成

optional 可以判断判是否为空,steam流可以更好的完成过滤操作

final Optional<Item> itemOptional = itemRepository.findById((String) sourceMap.get("itemId"));

itemOptional.ifPresent(item -> csoItemHelper.updateFieldsByItem(item, csoItem, viewData));
	public void updateFieldsByItem(final Item item, final CsoItem csoItem, final Cso cso) {
		handleItemFactoryByItem(item,csoItem);
	}

    private void handleItemFactoryByItem(final Item item, final CsoItem csoItem) {
        if (CollectionUtils.isEmpty(item.getItemVendorFactList())) {
            return;
        }
        final Optional<ItemVendorFact> defaultItemVendorFact = getDefaultItemVendorFact(item);
        if (defaultItemVendorFact.isPresent()) {
            final ItemVendorFact defaultVendorFact = defaultItemVendorFact.get();
            Vendor vendor = defaultVendorFact.getVendor();

            if (CollectionUtils.isEmpty(vendor.getFactList())) {
                return;
            }
            final Optional<VendorFact> defaultVenFact = getDefaultVendorFact(vendor);
            if (defaultVenFact.isPresent()) {
                final Fact defaultFact = defaultVenFact.get().getFact();
                csoItem.setFactory(defaultFact);
            }
        }
    }
    private Optional<ItemVendorFact> getDefaultItemVendorFact(final Item item) {
        return CommonUtil.safeStream(item.getItemVendorFactList())
            .filter(ItemVendorFact -> BooleanUtils.isTrue(ItemVendorFact.getIsDefault()))
            .findFirst();
    }
    private Optional<VendorFact> getDefaultVendorFact(final Vendor vendor) {
        return CommonUtil.safeStream(vendor.getFactList())
            .filter(vendorFact -> BooleanUtils.isTrue(vendorFact.getIsDefaultFact()))
            .findFirst();
    }
### 回答1: 假设现在有一个整数列表,我们想要使用 JavaStream 流和 filter 方法来找到其的偶数。 可以使用以下代码实现: ```java import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList()); System.out.println("偶数集合为: " + evenNumbers); } } ``` 以上代码,首先我们创建了一个整数列表 `numbers`,其包含了 1 到 10 的整数。然后,我们使用 `stream` 方法将列表转化为流对象,并使用 `filter` 方法来筛选出其的偶数。最后,我们使用 `collect` 方法将结果收集为一个集合。 输出结果为:`偶数集合为: [2, 4, 6, 8, 10]`,其包含了原始列表的所有偶数元素。 ### 回答2: stream流是Java 8引入的一个新的数据处理方式,filter是其的一个操作方法。filter方法可以根据指定的条件从流过滤出满足条件的元素,然后返回一个新的流。下面是一个案例来说明如何使用stream流的filter方法取出其一个元素的集合。 假设有一个存储了学生信息的集合,每个学生对象包含姓名和年龄两个属性。我们现在希望从这个集合找出年龄大于18岁的其一个学生。以下是实现代码示例: ```java import java.util.ArrayList; import java.util.List; import java.util.Optional; class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } public class Main { public static void main(String[] args) { List<Student> students = new ArrayList<>(); students.add(new Student("张三", 20)); students.add(new Student("李四", 17)); students.add(new Student("王五", 22)); students.add(new Student("赵六", 19)); Optional<Student> student = students.stream() .filter(s -> s.getAge() > 18) // 过滤出年龄大于18岁的学生 .findFirst(); // 取得第一个满足条件的学生对象 if (student.isPresent()) { System.out.println("年龄大于18岁的学生姓名:" + student.get().getName()); } else { System.out.println("找不到满足条件的学生!"); } } } 输出结果为:年龄大于18岁的学生姓名:张三 在这个案例,我们首先创建了一个存储学生信息的集合。然后使用stream流的filter方法,根据条件筛选出年龄大于18岁的学生对象。最后使用findFirst方法取得第一个满足条件的学生对象,并且将其姓名打印出来。 通过这个案例,我们可以看到使用stream流的filter方法可以方便地从集合取出满足条件的元素,并返回一个新的流供我们进一步处理。 ### 回答3: stream流的filter操作是一种对流进行筛选的操作,可以根据条件过滤流的元素。下面以一个案例来说明如何使用stream流的filter操作来取出其一个元素的集合。 假设有一个学生列表,每个学生对象都有姓名、年龄和成绩属性。我们想要从这个学生列表,找出年龄大于18岁的学生,并将他们的成绩放入一个集合。 首先,我们可以使用stream流操作将学生列表转换为流: ```java List<Student> studentList = Arrays.asList(new Student("Tom", 20, 90), new Student("John", 19, 85), new Student("Mary", 17, 95), new Student("Chris", 21, 88)); Stream<Student> studentStream = studentList.stream(); ``` 然后,我们使用filter操作筛选出年龄大于18岁的学生: ```java Stream<Student> filteredStudentStream = studentStream.filter(student -> student.getAge() > 18); ``` 在这里,我们使用lambda表达式来指定过滤的条件,即年龄大于18岁的学生。 最后,我们使用map操作将筛选后的学生转换为他们的成绩,并将其收集到一个集合: ```java List<Integer> scoreList = filteredStudentStream.map(Student::getScore) .collect(Collectors.toList()); ``` 在这里,我们使用map操作将学生对象转换为成绩,然后使用collect操作将成绩收集到一个列表。 这样,我们就成功地从学生列表找出了年龄大于18岁的学生,并将他们的成绩放入了一个集合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值