jdk1.8 stream的常见用法 看完还不会打我
1,集合遍历
public class StreamTest {public static void main(String[] args) {//1 遍历List list = new ArrayList<>();list.add("aaa");list.add("bbb");//使用lambda表达式输出list中的每个值list.forEach(c->{System.out.println(c);});//调用方法list.forEach(StreamTest::showList);}public static void showList(String value) {System.out.println(value);}
}
2,筛选集合
List list = new ArrayList<>();list.add("aaa");list.add("absc");list.add("bbb");List selectResult = list.stream().filter(value->{return value.startsWith("a"); }).collect(Collectors.toList());
3,筛选并去重
List list = new ArrayList<>();list.add("aaa");list.add("aaa");list.add("absc");list.add("bbb");List selectResult = list.stream().filter(value->{return value.startsWith("a"); }).distinct().collect(Collectors.toList());
4.截断流 取出结果的前n个元素
List list = new ArrayList<>();list.add("aaa");list.add("aaa");list.add("absc");list.add("bbb");List selectResult = list.stream().filter(value->{return value.startsWith("a");}).limit(3).collect(Collectors.toList());
5.跳过元素,它和limit是互补的
List list = new ArrayList<>();list.add("aaa");list.add("aaa");list.add("absc");list.add("bbb");List selectResult = list.stream().filter(value->{return value.startsWith("a"); }).skip(3).collect(Collectors.toList());
6.映射,对集合的每个元素操作,比如获取背包中所有物品的数量
List countList = role.getBag().getBagMap().values().stream().map(BagItem::getCount).collect(Collectors.toList());
7.集合流操作 ,例如 找到玩家背包中道具数据大于5的前3个道具id
Role role = new Role();List result = role.getBag().getBagMap().values().stream().filter(item -> item.getCount() > 5).map(BagItem::getItemId).limit(3).collect(Collectors.toList());
其中,filter是过滤,map是遍历所有项,并返回一个值,limit是取三个结果,collect是收集并返回。只有在collect时才执行计算代码。
8,流的扁平化 flatmap
它可以把几个相同类型的流合并成一个新的流。比如,获取List
List list = new ArrayList<>();list.add("aaa");list.add("aaa");list.add("absc");list.add("bbb");List selectResult = list.stream().map(v->v.split("")).flatMap(Arrays::stream).distinct().collect(Collectors.toList());
输出结果
[a, b, s, c]
9.匹配判断
List list = new ArrayList<>();list.add("aaa");list.add("aaa");list.add("absc");list.add("bbb");//是否所有的项都是以a开头boolean result = list.stream().allMatch(c->{return c.startsWith("a"); });System.out.println(result);//是否有任何一项是否以a开头result = list.stream().anyMatch(c->{return c.startsWith("a"); });//是否都不以a开头result = list.stream().noneMatch(c->{return c.startsWith("a"); });
这就是对应Java中的&& ,||
10.list转map
//转mapList roles = new ArrayList<>();Map map = roles.stream().collect(Collectors.toMap(Role::getRid, role-> role));
11.排序
List studentList=Arrays.asList(new Student(1,"ziwen1",10),new Student(2,"aiwen2",18),new Student(3,"biwen3",28));List studentList1=studentList.stream().sorted().collect(Collectors.toList());//自然序列List studentList2=studentList.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());//逆序List studentList3=studentList.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());//根据年龄自然顺序List studentList4=studentList.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.toList());//根据年龄逆序
12.求最值
PlayerHero hero1 = new PlayerHero();hero1.setHeroInfoId("1");hero1.setCombat(70);PlayerHero hero2 = new PlayerHero();hero2.setHeroInfoId("2");hero2.setCombat(20);PlayerHero hero3 = new PlayerHero();hero3.setHeroInfoId("3");hero3.setCombat(50);String id = Stream.of(hero2,hero3,hero1).max(Comparator.comparing(PlayerHero::getCombat)).get().getHeroInfoId();System.out.println(id);
13.求和
int totalCalories = menu.stream().collect(summingInt(Dish::getCalories));
集成了一些最常见的用法,也参考了网上一些用法,总结写在这里了,如有更好的用法,持续更新;如果喜欢,麻烦三连击(点赞、收藏、分享),哈哈,谢谢了
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
