Java中stream流的常見(jiàn)用法
這篇文章主要是記錄stream流的用法,因?yàn)閟tream流比較常用,并且一些操作較復(fù)雜,記錄在此,以后參考。
1、filter用法
主要是用來(lái)過(guò)濾集合中的元素,較常用。
List<User> list = new ArrayList<>();
list.add(new User(1, "小趙", "beijing"));
list.add(new User(2, "小錢(qián)", "shanghai"));
list.add(new User(3, "小孫", "tianjin"));
list.add(new User(4, "小李", "nanjing"));
list.add(new User(5, "小周", "shenzhen"));
// 過(guò)濾出address=tianjin的
List<User> list1 = list.stream().filter(item -> "tianjin".equals(item.getAddress())).collect(Collectors.toList());
System.out.println(list1);
2、peek用法
主要是用來(lái)修改元素的狀態(tài),比如其中對(duì)象的字段等
List<User> list = new ArrayList<>();
list.add(new User(1, "小趙", "beijing"));
list.add(new User(2, "小錢(qián)", "shanghai"));
list.add(new User(3, "小孫", "tianjin"));
list.add(new User(4, "小李", "nanjing"));
list.add(new User(5, "小周", "shenzhen"));
// peek操作主要用于修改集合中的元素
// 修改元素中的address為guangzhou
List<User> list2 = list.stream().peek(item -> item.setAddress("guangzhou")).collect(Collectors.toList());
System.out.println(list2);
3、map用法
主要是用來(lái)替換集合中的元素
List<User> list = new ArrayList<>();
list.add(new User(1, "小趙", "beijing"));
list.add(new User(2, "小錢(qián)", "shanghai"));
list.add(new User(3, "小孫", "tianjin"));
list.add(new User(4, "小李", "nanjing"));
list.add(new User(5, "小周", "shenzhen"));
// map操作主要是修改集合元素本身,也有一部分peek的功能
// 將list的元素替換成元素的字段或者替換成其他的對(duì)象
List<Integer> list3 = list.stream().map(User::getId).collect(Collectors.toList());
System.out.println(list3);
// map也可以用來(lái)peek的功能,比如下面例子,不過(guò)idea會(huì)提示用peek的
List<User> list4 = list.stream().map(item -> {
item.setAddress("beijing");
return item;
}).collect(Collectors.toList());
System.out.println(list4);
4、flatmap用法
主要是將集合中的元素?fù)Q成stream流
List<String> list1 = Arrays.asList("a", "b");
List<String> list2 = Arrays.asList("1", "2", "3");
// flatmap主要是將集合中的元素?fù)Q成stream流
List<String> list3 = list1.stream().flatMap(item -> list2.stream().map(i -> item + i)).collect(Collectors.toList());
// 將list1和list2中的元素拼接成list3
// [a1, a2, a3, b1, b2, b3]
System.out.println(list3);
5、list轉(zhuǎn)map用法
這種場(chǎng)景是用于根據(jù)對(duì)象已知字段查找集合中對(duì)應(yīng)元素文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-528652.html
List<User> list = new ArrayList<>();
list.add(new User(1, "小趙", "beijing"));
list.add(new User(2, "小錢(qián)", "shanghai"));
list.add(new User(3, "小孫", "tianjin"));
list.add(new User(4, "小李", "nanjing"));
list.add(new User(5, "小周", "shenzhen"));
// 將list轉(zhuǎn)成map
// 一般這種場(chǎng)景是用于根據(jù)對(duì)象已知字段查找集合中對(duì)應(yīng)元素
// 這種一般用于key是唯一的,不然異常,或者用下一種
Map<Integer, User> map = list.stream().collect(Collectors.toMap(User::getId, Function.identity()));
Map<Integer, User> map1 = list.stream().collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key2));
6、分組用法
這種一般用于按照元素的字段等條件進(jìn)行分組文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-528652.html
List<User> list = new ArrayList<>();
list.add(new User(1, "小趙", "beijing"));
list.add(new User(2, "小錢(qián)", "shanghai"));
list.add(new User(3, "小孫", "tianjin"));
list.add(new User(4, "小李", "nanjing"));
list.add(new User(5, "小周", "shenzhen"));
Map<Integer, List<User>> map = list.stream().collect(Collectors.groupingBy(User::getId));
到了這里,關(guān)于Java中stream流的常見(jiàn)用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!