26届JAVA 学习日记——Day15

2024.11.25 周一
周末回了趟家,没有背八股也没有做项目,大部分时间在休息,少部分时间在刷力扣。

八股

Java8 新特性

Java 8 有哪些新特性?

Java8 主要新增以下几个特性:

  • Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。

  • 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。

  • 默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。

  • 新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。

  • Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。

  • Date Time API − 加强对日期与时间的处理。

  • Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。

  • Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。

Stream API

案例1:过滤并收集满足条件的元素
问题场景:从一个列表中筛选出所有长度大于3的字符串,并收集到一个新的列表中。(本质上是将列表中的元素作统一处理,再收集新列表中

//  创建案例列表
List<String> originalList = Arrays.asList("apple","fig","banana","kiwi");
// Stream API 应用
List<String> filteredList = originalList.stream() //创建 stream流
                                        .filter(s -> s.length() > 3)  //使用filter筛选长度大于3的字符串
                                        .collect(Collectors.toList());  //将结果收集到一个新的列表中

案例2:计算列表中所有数字的总和
问题场景:计算列表中所有数字的总和。

//  创建案例列表
List<Integer> numbers = Arrays.asList(1,2,3,4,5);
// Stream API 应用
int sum = numbers.stream() //创建 stream流
                 .mapToInt(Integer::intValue)
                 .sum();

通过Stream API,我们可以先使用.mapToInt()Integer流转换为IntStream(这是为了高效处理基本类型),然后直接调用.sum()方法来计算总和,极大地简化了代码。

Lambda表达式

Lambda 表达式是一个匿名函数,java 8 允许把函数作为参数传递进方法中。

匿名内部类只重写了接口的一个方法,且只有一个方法需要重写,即只要方法的参数是函数式接口都能使用 Lambda 表达式。

常见的函数式接口案例:

Runnable接口
以下代码示例中,定义了一个新的Thread对象,并将一个实现了Runnable接口的匿名内部类作为参数传递给它

new Thread(new Runnable(){ 	
	@Overrdie 	
	public void run() { 		
		System.out.println("The runable now is using!"); 	
	} 
}).start();
-----------------Lambda应用------------------ 
new Thread(() -> System.out.println("The runable now is using!")).start(); 

Comparator接口

List<Integer> strings = Arrays.asList(1, 2, 3);

Collections.sort(strings, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
    return o1 - o2;}
});

-----------------Lambda应用一------------------ 
Collections.sort(strings, (Integer o1, Integer o2) -> o1 - o2);
-----------------Lambda应用二------------------
Comparator<Integer> comparator = (Integer o1, Integer o2) -> o1 - o2;
Collections.sort(strings, comparator);

Listener接口

JButton button = new JButton();
button.addItemListener(new ItemListener(){
@Override
public void itemStateChanged(ItemEvent e) {
	e.getItem();}
}); 
-----------------Lambda应用------------------ 
button.addItemListener(e -> e.getItem());

Java 8 允许使用 :: 关键字来传递方法或者构造函数引用,无论如何,表达式返回的类型必须是 functional-interface

自定义函数式接口:

@FunctionalInterface
public interface LambdaInterface {
 void f();
}

public class LambdaClass{
	public static void forEg(){
		// 该例子中实现 lambdaInterfaceDemo 通过 lambda表达式 传参并执行
		lambdaInterfaceDemo(() -> System.out.println("自定义函数式接口"));
	}
	//该方法的参数 是 函数式接口
	static void lambdaInterfaceDemo(LamdaInterface i){
		i.f();
	}
}

算法

53.最大子数组和
56.合并区间

项目

苍穹外卖-Day9
在这里插入图片描述

String.join()

在Java中,String.join 是一个静态方法,用于将多个字符串连接成一个字符串,并可以使用指定的分隔符分隔这些字符串。这个方法在Java 8及以后的版本中引入。

public static String join(CharSequence delimiter, CharSequence... elements)
  • delimiter:用于分隔元素的字符串。
  • elements:一个可变参数,可以是字符串数组或者实现了CharSequence接口的对象。

项目中通过该函数将一个字符串列表拼接成一个新的字符串。

    private String getOrderDishesStr(Orders orders) {
        //查询订单菜品详情
        List<OrderDetail> orderDetailList = orderDetailMapper.getByOrderId(orders.getId());

        //将每一条订单菜品信息拼接为字符串(格式:宫保鸡丁*3;)
        List<String> orderDishList = orderDetailList.stream().map(x -> {
            String orderDish = x.getName() + "*" + x.getNumber() + ";";
            return orderDish;
        }).collect(Collectors.toList());

        //将该订单对应的所有菜品信息拼接在一起
        return String.join("", orderDishList);
    }

@RestController("adminOrderController")

项目中存在两个同名的Controller时,IDEA会报错,此时通过为两个Controller注释后面设置不同的字符串就可以避免报错:

  • @RestController("adminOrderController")
  • @RestController("userOrderController")
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值