国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

別再問問JDK的Stream怎么用了好么?面試官

開發 前端
關于Stream 會用就好,真到面試問到了,知道這些關鍵字都是干什么用的,也就可以了,如果還有人問這個好幾年前的東西,那么這個公司好像也沒有什么進去的必要了。你說是么?

JDK8發布到現在,已經過了8年的時間了,但是就是到現在,依然在面試的過程中,還有人問這個 JDK8 里面都優化了什么內容,對比 JDK7 來說,今天阿粉就再繼續叨叨一次,真的是讓面試官給整服氣了。

JDK8 的 Stream

JDK8 要說牛,那是真的牛,讓你的代碼變的更加的簡潔,為什么這么說,那就是因為 Stream 流的存在。

Stream 是 Java8 中處理集合的關鍵抽象概念,它可以指定你希望對集合進行的操作,可以執行非常復雜的查找、過濾和映射數據等操作。使用Stream API 對集合數據進行操作,就類似于使用 SQL 執行的數據庫查詢。也可以使用 Stream API 來并行執行操作。簡而言之,Stream API 提供了一種高效且易于使用的處理數據的方式。

其實說這些話術類的,都是白搭,最主要的,還得是 Stream 的使用。

Stream的使用

篩選

其實篩選很簡單,為什么這么說呢,因為篩選,比如我們現在有三個人,張三,李四,王五,年齡分別是 20 ,22,27,我們要篩選出年齡大于20的人,并且組合成一個新的結果集返回,那么代碼肯定是:

List<User> userList = handleUser();
List<User> geUser = new ArrayList<>();
for (User user : userList) {
if (user.getAge() > 20){
geUser.add(user);
}
}

上面的handleUser只是一個賦值的操作,代碼也放上:

handleUser(){
List<User> userList = new ArrayList<>();
User user = new User();
user.setId(UUID.randomUUID().toString());
user.setName("張三");
user.setAge(20);
user.setDept("開發部");
userList.add(user);

User user1 = new User();
user1.setId(UUID.randomUUID().toString());
user1.setName("李四");
user1.setAge(22);
user1.setDept("測試部");
userList.add(user1);

User user2 = new User();
user2.setId(UUID.randomUUID().toString());
user2.setName("王五");
user2.setAge(27);
user2.setDept("財務部");
userList.add(user2);

return userList;

}

這時候,我們獲取到geUser這個結果集,就是我們篩選之后的,年齡大于20歲的人的數據。

那么如果使用 JDK8 的Stream 怎么來操作呢?

其實也不難

List<User> geUserStream = userList.stream().filter(e -> e.getAge() > 20).collect(Collectors.toList());

一行代碼,直接來個鏈式編程,一行代碼直接篩選出來,二者的結果都是一樣的,區別只是在代碼量上面,一個需要自己創建一個List 自己來操作,另外一個,直接不需要自己再創建了,直接在后面的 Collectors 給創建了,也是一種簡化代碼的方法。

循環

從這里我們來看 Stream 的循環,循環 for ,JDK7 和 JDK8 的循環的本質,并沒啥變化,變化的只是開發者寫的代碼。我們直接來對比一下寫法上的區別。

JDK7中的for循環
for (User user : collect) {
System.out.println("年齡大于20的人是:"+user.getName());
}

JDK8的for循環
collect.stream().forEach(vo->{
System.out.println("年齡大于20的人是:"+vo.getName());
});

循環區別好像并不大,看起來都挺方便的,所以使用什么,全看你自己。

聚合函數

為什么說聚合函數呢?這個聚合函數用的最多的地方,是不是在數據庫中,我們獲取嗎,max,min,count 這些聚合字段的時候使用到的,如果你想要在程序中篩選,那么避免不了雙層的for循環,然后去循環比對,或者是通過Collections 去處理,但是如果你使用 Stream 的話,那就很簡單了。

//JDK7 獲取List<String> 中字符串最長的那個
String[] strArr = new String[] { "cd", "ab", "ddfa", "sd", "zd" };
List<String> list = Arrays.asList(strArr);
String max = Collections.max(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.length() < o2.length()) {
return -1;
}
if (o1.length() == o2.length()) {
return o1.compareTo(o2);
} else {
return 1;
}
}
});
System.out.println(max);

那么如果使用Stream 來獲取呢?

JDK8獲取List<String>中最長的字符串

String[] strArr = new String[] { "cd", "ab", "ddfa", "sd", "zd" };
List<String> list = Arrays.asList(strArr);
Optional<String> max = list.stream().max(Comparator.comparing(String::length));
System.out.println(max.get());

二者返回的結果也都是一模一樣的,但是代碼量來說,就不是一個層級了,至少 JDK8 能簡化了許多的代碼,至少在開發效率上面來說,就相對的比較快了。

min 也是同理,阿粉就不再贅述了,阿粉接下來說說這個 count 。一般count都會在哪些地方使用呢?

count()是獲取流總數簡寫的方法。

其實和size就是一個意思,但是size我們是不能搭配一些filter使用的,但是count可以呀。

List<Integer> numList = Arrays.asList(42, 44, 43, 41); 

//獲取List中大于43的元素的個數

long count = numList.stream().filter(e -> e > 43).count();
System.out.println(count);

這么一看,是不是感覺 Stream 里面的方法有時候也挺有用的,至少在代碼上,能夠讓我們省下來不少時間。

Map

其實還有一些不是那么常用的,比如Map,這個的用法一般屬于那種,不能夠進行連表查詢的情況,就比如我們現在有一個訂單表,然后訂單表中有關聯的付款情況,這個時候就可能出現,一個訂單,對應多種付款情況,但是如果要是數據量非常大的情況,反而不太適合使用連表的查詢,于是只能先查詢出訂單,然后使用in的方式去查詢付款情況。

我們繼續用上面的 User 對象。

JDK7獲取List中的Id數據:

//給List賦值
List<User> list = getList();
//新的IdList
List<String> Ids = new ArrayList<>();
for (User user: list) {
Ids.add(user.getId());
}

JDK8 獲取Id數據

List<String> jdk8Ids = list.stream().map(User::getId).collect(Collectors.toList());
System.out.println("JDK8的獲取數據==="+JSON.toJSON(jdk8Ids));

然后我們在用id去查詢指定的數據就可以了。

關于Stream 會用就好,真到面試問到了,知道這些關鍵字都是干什么用的,也就可以了,如果還有人問這個好幾年前的東西,那么這個公司好像也沒有什么進去的必要了。你說是么?

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2020-04-16 08:22:11

HTTPS加解密協議

2024-08-16 13:59:00

2019-07-10 10:06:24

面試官三次握手四次揮手

2018-09-28 05:25:53

TopK算法代碼

2018-11-01 13:49:23

桶排序排序面試

2018-10-28 22:37:00

計數排序排序面試

2018-11-06 11:40:19

時間復雜度面試算法

2021-04-30 00:00:50

Semaphore信號量面試官

2015-08-13 10:29:12

面試面試官

2020-09-24 14:40:55

Python 開發編程語言

2019-04-16 13:30:05

表達式求值數據結構算法

2025-12-09 01:00:00

2023-07-05 08:17:38

JDK動態代理接口

2021-11-24 10:10:32

axios前端攔截器

2024-07-23 08:21:19

2020-04-20 13:11:21

HashMap底層存儲

2021-06-08 08:33:23

NodeStream數據

2022-05-23 08:43:02

BigIntJavaScript內置對象

2019-01-08 15:11:50

最大值最小值算法

2023-02-08 07:04:20

死鎖面試官單元
點贊
收藏

51CTO技術棧公眾號

亚洲欧美一区二区精品久久久| 久久精品亚洲一区| 中文字幕第88页| 久久99蜜桃精品| 国产精品久久不能| 中文字幕日韩在线| 日韩电影中文字幕一区| 日韩av在线资源| 黄黄的网站在线观看| 大伊人狠狠躁夜夜躁av一区| 好紧好硬好湿我太爽了| 亚洲国产精品精华液ab| 日本xxxxxxxxxx75| 国产激情视频一区二区三区欧美| 国产在线一区二| 亚洲五月综合| 91在线免费看网站| www.99热这里只有精品| 国产青青草在线| 丁香花在线观看完整版电影| 电影一区二区三区久久免费观看| 91在线视频| 色综合综合色| 欧美激情一区二区三区久久久| 自拍偷拍欧美视频| 亚洲国产欧美在线成人app| 浪潮av一区| 欧美日韩国产a| 国产传媒在线播放| 欧美成人一区二区三区| 天堂va在线| 日韩精品视频免费| 青青热久免费精品视频在线18| 亚洲精品一区二区三区婷婷月| 538在线视频| 亚洲图片欧洲图片av| 国外成人福利视频| 欧美国产高跟鞋裸体秀xxxhd| 999精品在线| 久久99精品久久久久久青青91| 三上悠亚av一区二区三区| 色喇叭免费久久综合网| 亚洲精美色品网站| 日产国产精品精品a∨| av手机在线观看| 亚洲一区二区三区自拍| 国产精品va在线播放| 加勒比久久综合| 成人午夜电影在线播放| 黄色日韩精品| 亚洲精品中文字幕在线| 成人中文字幕电影| 青青久草在线| 99久久精品免费精品国产| www.亚洲天堂| 天天干天天综合| 国产黄在线看| 欧美日韩视频在线第一区| 午夜不卡视频| 欧美哺乳videos| 国产精品99久久久久久董美香| 性色av一区二区三区免费| 91精品国产乱码久久久久久久| 日韩一区不卡| 国产日产欧美一区二区三区 | 久久人人爽人人爽| 男女性激情视频在线观看| 欧美在线视频你懂得| 羞羞污视频在线观看| 最近2019中文字幕一页二页| 日韩电影免费网址| 国产911在线观看| 亚洲综合一区二区| 四虎影院观看视频在线观看| 欧美大片va欧美在线播放| 亚洲经典一区| 亚洲精品久久久久久久蜜桃臀| 亚洲免费视频成人| 黄频免费在线观看| 国产精品视频自拍| 福利电影一区二区三区| 欧美扣逼视频| 日韩在线欧美在线| 亚洲第一毛片| 五月天电影免费在线观看一区| 日韩免费一区二区三区在线播放| 日韩大胆成人| 国产精品自拍合集| 在线观看av一区二区| 精品中文字幕一区二区三区四区| 久久人人九九| 亚洲综合色网站| 激情亚洲小说| 欧美资源一区| 日韩欧美国产激情| 麻豆一区二区| 国产午夜福利100集发布| 在线电影国产精品| 偷拍亚洲色图| 国产精品网站免费| 亚洲第一av在线| 一区在线播放| 在线视频您懂的| 国内精品久久久久久影视8| 国内精品伊人久久久久av影院| 久草在线网址| 国产日韩欧美91| 亚洲少妇最新在线视频| 欧美与亚洲与日本直播| 蜜桃麻豆91| 色老汉一区二区三区| 欧美理伦片在线播放| 一区二区不卡在线观看| 91久久线看在观草草青青| 亚洲aa在线| 手机视频在线观看| 色妞一区二区三区| 美女网站一区二区| 午夜dj在线观看高清视频完整版| 国产欧美精品日韩精品| 中文字幕一区二区不卡| 久久国产精品美女| 男女啪啪免费视频网站| 国产香蕉一区二区三区在线视频 | 成人在线免费观看| 国产日韩欧美在线观看| 亚洲色图第一区| 一区二区在线视频观看| 国产成人久久777777| 一区二区三区四区视频| 国产精品99久| 亚洲www啪成人一区二区| 好吊色视频988gao在线观看| 日韩黄色av网站| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩久久电影| 可以免费观看av毛片| 久久在线免费观看视频| www.性欧美| 电影91久久久| 国产日韩欧美久久| 国产精品国模在线| 欧美视频二区36p| 99香蕉国产精品偷在线观看 | 欧美尤物一区| 亚洲精品国产品国语在线| 久久激情五月婷婷| 性欧美又大又长又硬| 久激情内射婷内射蜜桃| 色综合久久88| 亚洲精品国产第一综合99久久| 日韩成人综合| 欧美三级电影一区二区三区| 鲁丝片一区二区三区| 亚洲美女www午夜| 久久综合久久99| 亚洲黄页网站| 成人jjav| 免费拍拍拍网站| 91精品国产高清自在线| 亚洲国产中文字幕| 午夜在线a亚洲v天堂网2018| 蜜臀国产一区| 99热手机在线观看| 成人三级在线| 伊人伊成久久人综合网小说| 国产精品麻豆99久久久久久| 91偷拍一区二区三区精品| 老司机在线看片网av| 在线观看17c| 青青精品视频播放| 欧美精品 日韩| 成人网页在线观看| 精品国产视频| 亚洲国产精品精华素| 国产免费毛卡片| 成人女保姆的销魂服务| 欧美大肚乱孕交hd孕妇| 99re视频精品| 亚洲综合激情在线| 夜鲁夜鲁夜鲁视频在线播放| 91精品无人成人www| 精品国产乱码久久久久| 久久久精品国产| 91激情在线视频| 成人一道本在线| 亚洲一区二区日韩| 中文字幕日本一区| 国产在线视频你懂得| 久久这里只有精品23| 亚洲自拍av在线| 日韩中文字幕在线视频播放| 欧美日韩国产综合视频在线观看中文| 六月婷婷色综合| 伊人精品一区| 2001个疯子在线观看| y4480在线8影院| 日本老太婆做爰视频| 91亚洲一区精品| 精品国内亚洲在观看18黄|