Android Studio下使用Java 8 ——让你的代码更优雅
来源:互联网 发布:mui.pulltorefresh.js 编辑:程序博客网 时间:2024/06/09 23:05
1、foreach遍历
1.1 遍历map
在java 8之前,我们 遍历 map一般都是:
Map<String, Integer> items = new HashMap<>();items.put("A", 10);items.put("B", 20);items.put("C", 30);items.put("D", 40);items.put("E", 50);items.put("F", 60);for (Map.Entry<String, Integer> entry : items.entrySet()) { System.out.println("Item : " + entry.getKey() + " Count : " + entry.getValue());}
而在java 8中,你可以这样:
Map<String, Integer> items = new HashMap<>();items.put("A", 10);items.put("B", 20);items.put("C", 30);items.put("D", 40);items.put("E", 50);items.put("F", 60);items.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v));items.forEach((k,v)->{ System.out.println("Item : " + k + " Count : " + v); if("E".equals(k)){ System.out.println("Hello E"); }});
*注意:
将此代码直接 放进android studio中会报错,并不是代码本身的问题,而是gradle配置的问题。
在Android Studio中,即使你的项目jdk默认是1.8,也会报错:
Error: Jack is required to support java 8 language features. Either enable Jack or remove sourceCompatibility JavaVersion.VERSION_1_8.
错误:Jack需要支持java 8语言功能。 启用Jack或删除sourceCompatibility JavaVersion.VERSION_1_8。
解决办法:
项目gradle中
android { compileSdkVersion 24 defaultConfig { ··· jackOptions { enabled true } } buildTypes { ··· } buildToolsVersion '25.0.0' compileOptions { **sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8** }}dependencies { ···}
如此配置即可。
1.2 遍历list
java 8之前:
List<String> items = new ArrayList<>();items.add("A");items.add("B");items.add("C");items.add("D");items.add("E");for(String item : items){ System.out.println(item);}
java 8: foreach + 拉姆达表达式 或者 method reference(方法引用)
List<String> items = new ArrayList<>();items.add("A");items.add("B");items.add("C");items.add("D");items.add("E");//lambda//Output : A,B,C,D,Eitems.forEach(item->System.out.println(item));//Output : Citems.forEach(item->{ if("C".equals(item)){ System.out.println(item); }});//method reference//Output : A,B,C,D,Eitems.forEach(System.out::println);//Stream and filter//Output : Bitems.stream() .filter(s->s.contains("B")) .forEach(System.out::println);
2、java 8 stream
Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。
java 8之前的 取值、排序:
List<Transaction> groceryTransactions = new Arraylist<>();for(Transaction t: transactions){ if(t.getType() == Transaction.GROCERY){ groceryTransactions.add(t); }}Collections.sort(groceryTransactions, new Comparator(){ public int compare(Transaction t1, Transaction t2){ return t2.getValue().compareTo(t1.getValue()); }});List<Integer> transactionIds = new ArrayList<>();for(Transaction t: groceryTransactions){ transactionsIds.add(t.getId());}
java 8:
List<Integer> transactionsIds = transactions.parallelStream(). filter(t -> t.getType() == Transaction.GROCERY). sorted(comparing(Transaction::getValue).reversed()). map(Transaction::getId). collect(toList());
- Android Studio下使用Java 8 ——让你的代码更优雅
- SharedPreferences的封装使用,让你的代码更优雅
- 让你的python代码更优雅(pythonic)—— 基于PEP8
- 如何创建一个baseActivity,让你的代码更优雅
- Butterknife的使用讲解(让你的代码更优雅)
- Lombok:让JAVA代码更优雅
- Lombok:让JAVA代码更优雅
- Java 8 stream: 让你的代码更简洁
- 妙用ES6解构和扩展运算符让你的代码更优雅
- 妙用ES6解构和扩展运算符让你的代码更优雅
- 妙用ES6解构和扩展运算符让你的代码更优雅
- CSS 黑魔法小技巧,让你少写不必要的JS,代码更优雅
- CSS 黑魔法小技巧,让你少写不必要的JS,代码更优雅
- 学习这些设计模式,让你写出更优雅的代码
- 如何配置风骚的android studio编辑器,让编程更优雅?
- 让你的Android studio 更美起来
- 让你的程序更优雅的sleep
- 让你的JS更优雅的小技巧
- extjs 修改官方主题
- @Autowired与@Resource的区别
- WebSocket简单介绍
- eclipse解决svn地址不显示问题
- Leetcode解题笔记 207.Course Schedule [Medium] 拓扑排序
- Android Studio下使用Java 8 ——让你的代码更优雅
- Apache配置HTTPS协议搭载SSl配置全过程
- 遍历Map的两种方法:keySet()和entrySet() 以及ArrayList的toArray
- spring boot视频-网易云课堂视频目录
- POJ-2377 Bad Cowtractors
- $.getJSON()异步请求的问题
- codevs 1052 地鼠游戏 堆优化贪心 解题报告
- 阿里巴巴Java面试题目
- 在linux编写脚本相关问题(更新)