JAVA 中使用lambda优化代码

案例一、

原代码

 String bjid = jxglJxzlcj.getBjid();
        if (StrUtil.isNotEmpty(bjid)) {
            List<Map<String, Object>> zyxxList = jdbcTemplateService.getListMap(String.format(zyxxSql, bjid, CommonUtils.getXxdm()));
            if(zyxxList.size() > 0 && zyxxList.get(0).get("zymc")!= null){
                jxglJxzlcj.setZymc(zyxxList.get(0).get("zymc")+"");
            }
        }

优化代码

String bjid = jxglJxzlcj.getBjid();
        Optional.ofNullable(bjid)
                .ifPresent(id -> {
                    List<Map<String, Object>> zyxxList = jdbcTemplateService.getListMap(String.format(zyxxSql, id, CommonUtils.getXxdm()));
                    zyxxList.stream()
                            .findFirst()
                            .map(map -> map.get("zymc"))
                            .ifPresent(zymc -> jxglJxzlcj.setZymc(zymc.toString()));
                });

案例二、

  String zyxxSql = "select distinct jjjb.ZBID,si.zymc from jxyx_jcxxsz_jxbxx_bjcy jjjb join stu_info si on si.id=jjjb.stu_info_id " +
            "where jjjb.zbid in ('%s') and si.IS_DELETE = '0' and si.xxdm = '%s'";

    String bjxxSql = "select id,bh,bjmc from CASE_SCHOOL_CLASS_INFO where xxdm = '%s' and id in ('%s')  " +
            "union all " +
            "select id,jxbh,jxbmc from JXYX_JCXXSZ_JXBXX where xxdm = '%s' and id in ('%s')";
@Override
    public void afterFetch(Collection<Map<String, Object>> list) {
        String xxmd = CommonUtils.getXxdm();
        //查询班级名称
        String bjidStrs = list.stream()
                .map(map -> MapUtil.getStr(map, "bjid", ""))
                .distinct().collect(Collectors.joining("','"));
        bjidStrs = bjidStrs.substring(0,bjidStrs.length()-3);
        List<Map<String, Object>> bjxxList = jdbcTemplateService.getListMap(String.format(bjxxSql,xxmd,bjidStrs,xxmd,bjidStrs));
        bjxxList.stream()
                .forEach(item -> list.stream()
                        .filter(e -> e.get("bjid") != null && item.get("id") != null && e.get("bjid").equals(item.get("id")))
                        .forEach(e -> e.put("bjmc", item.get("bjmc"))));
        //查询专业名称
        List<Map<String, Object>> zyxxList = jdbcTemplateService.getListMap(String.format(zyxxSql,bjidStrs,xxmd));
        zyxxList.stream()
                .forEach(item -> list.stream()
                        .filter(e -> e.get("bjid") != null && item.get("ZBID") != null && e.get("bjid").equals(item.get("ZBID")))
                        .forEach(e -> e.put("zymc", item.get("zymc"))));

    }

说明:

import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        // 创建一个包含值的 Optional 对象
        Optional<String> optional = Optional.of("Hello, World!");

        // 使用 ifPresent 方法检查 Optional 对象中是否有值,并执行相应操作
        optional.ifPresent(value -> System.out.println("Value present: " + value));

        // 创建一个空的 Optional 对象
        Optional<String> emptyOptional = Optional.empty();

        // 使用 ifPresent 方法检查空的 Optional 对象中是否有值,并执行相应操作
        emptyOptional.ifPresent(value -> System.out.println("This will not be printed"));
    }
}

在 Java 中,ifPresent 是一个用于 Optional 类型的方法,用于检查 Optional 对象中是否存在值并执行相应的操作。ifPresent 方法接受一个 Consumer 函数式接口作为参数,如果 Optional 对象中包含值,则将该值传递给 Consumer 接口的实现方法。

在上面的示例中,我们首先创建了一个包含值的 Optional 对象和一个空的 Optional 对象。然后,我们使用 ifPresent 方法检查这两个 Optional 对象中是否存在值,并分别执行相应的操作。对于包含值的 Optional 对象,会执行打印操作;而对于空的 Optional 对象,则不会执行任何操作。

  • 17
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我来帮助你使用 Java 8 的新特性来优化这段代码。 首先,我们可以使用 Java 8 的 Stream API 和 Lambda 表达式来优化这段代码使用 Stream API 和 Lambda 表达式可以帮助我们简化代码,并提高代码的可读性。 例如,我们可以使用 Stream API 来代替 for 循环,并使用 Lambda 表达式来简化 if 语句。 例如,下面是使用 Stream API 和 Lambda 表达式优化后的代码: ``` List<String> result = list.stream() .filter(s -> s.length() > 3) .map(String::toUpperCase) .collect(Collectors.toList()); ``` 另外,我们还可以使用 Java 8 的 Optional 类来优化这段代码。Optional 类是一个可以为 null 的容器对象,它可以帮助我们避免空指针异常。 例如,我们可以使用 Optional 类来代替 if 语句,从而使代码更加简洁。 例如,下面是使用 Optional 类优化后的代码: ``` Optional<String> result = list.stream() .filter(s -> s.length() > 3) .map(String::toUpperCase) .findFirst(); ``` 希望这些建议能帮助你使用 Java 8 的新特性优化代码。 ### 回答2: 使用Java 8的新特性可以优化这段代码。有几个可以改进的方面: 1. 使用Lambda表达式来替代匿名内部类:Lambda表达式可以简化代码,提高可读性。比如,在使用线程时可以使用Lambda表达式来创建匿名线程。 2. 使用流操作来替代循环:Java 8引入了Stream API,可以通过流操作来处理集合数据,简化了循环的使用。在处理集合数据时,可以使用流操作来替代传统的循环。 3. 使用Optional类来避免NullPointerException:Optional类是Java 8引入的用于解决NullPointerException的问题。可以使用Optional类来替代传统的空指针检查,提高代码的健壮性。 4. 使用新的日期和时间API:Java 8引入了新的日期和时间API,提供了一种更加简单和方便的方式来处理日期和时间。可以使用新的日期和时间API来替代旧的Date和Calendar类,使代码更加清晰和易于维护。 通过使用Java8的新特性,能够简化代码,提高可读性和性能。这些优化将使代码更加清晰,易于理解和维护。 ### 回答3: 使用Java 8的新特性可以通过Lambda表达式和流(stream)来优化代码。考虑以下示例代码: ```java List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David"); // 原始代码 List<String> result = new ArrayList<>(); for (String name : names) { if (name.startsWith("A")) { result.add(name.toUpperCase()); } } ``` 我们可以使用Java 8提供的Lambda表达式和流来优化上面的代码,使其更加简洁和易读。 ```java List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David"); // 使用Lambda表达式和流优化后的代码 List<String> result = names.stream() .filter(name -> name.startsWith("A")) .map(String::toUpperCase) .collect(Collectors.toList()); ``` 通过使用`stream()`方法将集合转换为流,我们可以使用`filter()`方法过滤出以"A"开头的姓名,然后使用`map()`方法将名称转换为大写,最后使用`collect()`方法将结果收集到一个新的列表。 这样的优化代码不但更简洁,同时也更易于理解和维护。Lambda表达式和流的引入使代码更加函数式和声明式,减少了冗余代码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值