如何用Java 8重写筛选获取最新活跃GUID的传统Java代码?
用Java 8 Stream API重写过滤排序逻辑
嘿,作为Java 8新手,用Stream API重构这段代码其实超直观的!咱们先理清楚你原来的逻辑:过滤出active为"YES"的Guid → 按created时间倒序排序 → 取最新的那个,用Stream可以把这些步骤链式调用,代码更简洁易读。
重写后的方法实现
直接上代码,我会一步步解释每个部分:
private static Guid filterAndSortUsingJava8Stream(List<Guid> guids) { return guids.stream() // 1. 过滤active为"YES"的元素,常量放前面避免空指针 .filter(guid -> "YES".equals(guid.getActive())) // 2. 按created日期倒序排序,用方法引用+reversed()简化 .sorted(Comparator.comparing(Guid::getCreated).reversed()) // 3. 取第一个元素,返回Optional,更安全(避免过滤后列表为空的情况) .findFirst() // 如果没有符合条件的元素,返回null(你也可以换成orElseThrow抛异常,根据业务需求) .orElse(null); }
完整的测试代码
把这个方法替换到你的StreamFilterSortMain类里,main方法调用部分不用改,或者也可以直接调用新方法:
public class StreamFilterSortMain { public static void main(String[] args) throws InterruptedException { List<Guid> guids = new ArrayList<>(); guids.add(new Guid("guid1","YES",new Date())); Thread.sleep(1000); guids.add(new Guid("guid2","NO",new Date())); Thread.sleep(1000); guids.add(new Guid("guid3","YES",new Date())); Thread.sleep(1000); guids.add(new Guid("guid4","YES",new Date())); // Java 8 Stream方式调用 Guid pGuid = filterAndSortUsingJava8Stream(guids); System.out.println("Guid="+pGuid); } private static Guid filterAndSortUsingJava8Stream(List<Guid> guids) { return guids.stream() .filter(guid -> "YES".equals(guid.getActive())) .sorted(Comparator.comparing(Guid::getCreated).reversed()) .findFirst() .orElse(null); } }
几个新手友好的小提示
- 空指针防护:把
"YES".equals(guid.getActive())换成guid.getActive().equals("YES")可能会在guid.getActive()为null时抛NPE,所以常量放前面更安全。 - Optional的使用:
findFirst()返回Optional<Guid>,比起原来直接filteredGuids.get(0),它能处理过滤后没有元素的情况,不会直接抛IndexOutOfBoundsException,你可以根据业务选择orElse(null)、orElseThrow()或者其他处理方式。 - 方法引用简化:
Comparator.comparing(Guid::getCreated)比匿名内部类简洁太多,Java 8的方法引用和Lambda表达式是核心,多练几次就顺手啦!
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

