Java8 lambda表达式

本文介绍Java8新特性如何应用于Android开发中,包括使用Lambda表达式简化监听器设置,利用Stream API处理集合数据,演示了过滤、求和、转换及统计数据的操作。此外还探讨了Lambda表达式的特性和限制。

java8新特性在android上的应用主要有匿名监听类,以及集合操作,大致例子如下:

1、监听:

textView.setOnClickListener((view)->{Toast.makeText(MainActivity.this,"哈哈",Toast.LENGTH_LONG).show();});
textView.setOnLongClickListener(v-> {
            String name = "";
            name = "fjsdkjfasd";
            Toast.makeText(MainActivity.this,name,Toast.LENGTH_LONG).show();
    return true;}
    );
2、集合list进行过滤,并循环操作:关键字filter和predicate
List<String> strings = Arrays.asList("sdfhkas", "sfaksf");
strings.forEach(e->Log.d("jjk",e));
Predicate<String> predicate1 = e->e.startsWith("s");
Predicate<String> predicate2 = e->e.length()==3;
strings.stream().filter(predicate1.and(predicate2)).forEach(textView::setText);
注意filter中的条件操作是可以进行 与或的,如上。

3、集合求和:关键字:reduce()

List<Integer> integerList = Arrays.asList(6, 3, 7, 22);
Integer integer = integerList.stream().reduce((total, e) -> total + e).get();
4、对集合中的元素进行操作,并转化为新的集合输出:关键字map和collect
List<Integer> collect = integerList.stream().filter(e -> e > 7).collect(Collectors.toList());
List<Integer> collect1 = collect.stream().map(e -> e + 3).collect(Collectors.toList());
5、对集合进行去重操作:关键字:distinct.因为distinct操作比较耗性能,所以先unsorted
integerList.stream().unordered().distinct().collect(Collectors.toList());
6、对于数字可以一次性操作,得到统计数据,如max min average sum,关键字summaryStatics.
IntSummaryStatistics intSummaryStatistics = integerList.stream().mapToInt(x -> x).summaryStatistics();
intSummaryStatistics.getAverage();
intSummaryStatistics.getSum();
7、lambda表达式包含:生命了funtion接口的方法,或者只有一个抽象方法的接口;lambda表达式是一个闭包,对于声明在闭包外的变量,必须是final型,或者只访问,不能进行修改,否则编译器会直接报错。
表达式基本写法: (按顺序写参数,没有的话就不能写)->{函数语句}
new Thread(()->doWork()).start();
View.OnClickListener clickListener = v->textView.setText(v.getId()+"");
new ListView(this).setOnItemClickListener((parent, view, position, id) -> {
    if (position==9) {
        
    }
  
});







### Java 8 Lambda表达式的使用 Java 8 Lambda表达式可以用于简化代码,特别是在处理函数式接口时。函数式接口是指只包含一个抽象方法的接口。Lambda表达式可以作为参数传递给方法,或者赋值给函数式接口类型的变量。在将匿名类转换成函数式代码时,可借助Netbeans IDE,它对Java 8支持良好,会及时给出提示,跟着提示就能较容易地完成转换[^2]。 ### Java 8 Lambda表达式的特性 - **简洁性**:Lambda表达式可以让代码更加简洁,避免了使用匿名内部类时的繁琐语法。 - **函数式编程**:支持函数式编程范式,使得代码更具可读性和可维护性。 - **延迟执行**:Lambda表达式可以在需要的时候才执行,实现延迟执行的效果。 ### Java 8 Lambda表达式的示例 Lambda表达式有几种不同的语法形式: - `(params) -> expression`:当Lambda表达式只包含一个表达式时,可以省略花括号和`return`语句。 - `(params) -> statement`:当Lambda表达式只包含一条语句时,也可以省略花括号。 - `(params) -> { statements }`:当Lambda表达式包含多条语句时,需要使用花括号,并且如果有返回值,需要显式使用`return`语句。 以下是一些具体的示例代码: ```java import java.util.Arrays; import java.util.List; // 示例1:使用Lambda表达式实现Runnable接口 class LambdaExample { public static void main(String[] args) { // 传统的匿名内部类方式 Thread t1 = new Thread(new Runnable() { @Override public void run() { System.out.println("传统方式:线程正在运行"); } }); t1.start(); // 使用Lambda表达式 Thread t2 = new Thread(() -> System.out.println("Lambda方式:线程正在运行")); t2.start(); // 示例2:使用Lambda表达式遍历列表 List<String> list = Arrays.asList("apple", "banana", "cherry"); // 传统的for-each循环 for (String fruit : list) { System.out.println("传统方式遍历:" + fruit); } // 使用Lambda表达式和forEach方法 list.forEach(fruit -> System.out.println("Lambda方式遍历:" + fruit)); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值