首页 > 其他分享 >Stream流

Stream流

时间:2023-08-29 22:56:40浏览次数:37  
标签:Stream stream System forEach println out

Stream流

获取Stream流
  • 作用:结合了lambda表达式,简化集合,数组操作
  • 使用步骤
    • 先得到一条stream流并把数据放上去
    • 利用stream流中的API进行各种操作
    • 中间方法:过滤,转换
    • 终结方法:统计,打印
ArrayList<String> list1 = new ArrayList<>();
list1.add("张三丰");
list1.add("张文远");
list1.add("张辽");
list1.add("李四");
ArrayList<String> list2 = new ArrayList<>();
for(String name:list1){
    if(name.startsWith("张")){
        list2.add(name);
    }
}
System.out.println(list2);

单列集合获取stream流

//单列集合获取stream流
ArrayList<String> list3 = new ArrayList<>();
Collections.addAll(list3,"张三丰","张文远","李四","张辽");
Stream<String> stream1 = list3.stream();
stream1.forEach(new Consumer<String>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
});
//简写
list3.stream().forEach(s -> System.out.println(s));

Collection中的默认方法获取单列集合,双列集合无法直接使用stream流

双列集合获取stream流

HashMap<String,Integer> hm = new HashMap<>();
hm.put("aaa",1);
hm.put("bbb",2);
hm.put("ccc",3);
hm.put("ddd",4);
hm.keySet().stream().forEach(s-> System.out.println(s));
//aaa
//ccc
//bbb
//ddd
//第二种
hm.entrySet().stream().forEach(s-> System.out.println(s));
//aaa=1
//ccc=3
//bbb=2
//ddd=4

数组

int[] arr = {1,2,3,4,5,6};
Arrays.stream(arr).forEach(s-> System.out.print(s));//123456

数组引用数据类型

String[] arr2 = {"aaa","bbb"};
Arrays.stream(arr2).forEach(s-> System.out.print(s));//aaabbb

零散数据(同种数据类型)

Stream.of(1,2,3,4,5).forEach(s-> System.out.print(s));//12345
Stream.of("a","b","c","d","e").forEach(s-> System.out.print(s));//abcde

of是可变参数,底层是数组

stream接口中静态方法of的细节

方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组

但是数组必须是引用数据类型的,如果传递基本数据类型,是会把整个数组当做一个元素,放到Stream当中

int[] arr = {1,2,3,4,5,6};

String[] arr2 = {"aaa","bbb"};

Stream.of(arr).forEach(s-> System.out.println(s));//[I@41629346
Stream.of(arr2).forEach(s-> System.out.println(s));//aaabbb
中间方法
  • 中间方法,返回新的stream流,原来的流只能用一次,建议使用链式编程

  • 修改流中的数据不会影响原来集合或数组中的数据

list.stream().filter(new Predicate<String>() {
    @Override
    public boolean test(String s) {
        return s.startsWith("张");
    }
}).forEach(s-> System.out.println(s));

list.stream().filter(s->s.startsWith("张")).forEach(s-> System.out.println(s));
Stream<String> stream1 = list.stream().filter(s->s.startsWith("张"));
Stream<String> stream2 = stream1.filter(s->s.length()==3);
stream2.forEach(s-> System.out.println(s));

stream1就没了,stream1已经关闭

流只能用一次,就不用变量接收了,可以链式编程

.limit(3)只要前三个
.skep(4)跳过前4个
.distinct()去重,依赖hashcode和qeuals方法
.concat合并a和b两个流为一个,两个流的数据类型尽量一致,否则会进行类型的提升,把两个流中的数据类型换成更高的
.map()转化流中的数据类型
"张无忌-15",获取int 15
list.stream().map(s->Integer.aprseInt(s.split("-")[1])).foreach(s->sout(s))
终结方法
foreach()遍历
(int) .count()统计
toArray()收集放到数组中
collect()收集放到集合中
Object[] arr = list.stream().toArray();
System.out.println(Arrays.toString(arr));
//[张三丰, 张文远, 李四, 张辽]
String arr = list.stream().toArray(value->new String[value]);
.collect(Collectors,toList())//收集到list
.collect(Collectors,toliet())//收集到Set,set会自动去重
收集到map:
确定谁作为键谁作为值:
list.stream().filter().collect(Collector.toMap(参数1键的生成规则,参数2值的生成规则new function))
map键不能重复
list.stream().filter().collect(Collector.toMap(s->s.split("-")[0],s->Integer.parseInt(s.split("-")[2]))

标签:Stream,stream,System,forEach,println,out
From: https://www.cnblogs.com/lmcool/p/stream.html

相关文章

  • 20230621 java.io.OutputStream
    介绍java.io.OutputStreampublicabstractclassOutputStreamimplementsCloseable,FlushableFilterOutputStream是典型的装饰器设计模式,很多子类继承这个类,提供额外的功能protectedOutputStreamout;publicFilterOutputStream(OutputStreamout){this.out=ou......
  • 20230621 java.io.InputStream
    介绍java.io.InputStreampublicabstractclassInputStreamimplementsCloseableFilterInputStream是典型的装饰器设计模式,很多子类继承这个类,提供额外的功能protectedvolatileInputStreamin;protectedFilterInputStream(InputStreamin){this.in=in;}装......
  • 如何在github或gitlab中将upstream项目中的新分支添加到fork后的origin项目中?
    1、问题:在gitlab或github中,将某项目进行了fork,fork后在自己的项目空间中就有了自己的origin项目,之后如果在源项目(upstream项目)中添加了新的分支,但是在自己的origin项目中不会被同步添加上,这就需要自己去添加这个分支(假如分支名为:new)。2、解决:要将新的分支添加到自己的origin项......
  • 使用 XStream实现JavaBean 与 XML/JSON 之间相互转换
    XML和JSON是当今常用的两种数据描述与传输的格式,特别是涉及到JS时使用JSON颇为频繁。自然,在Java的世界里少不了完成JavaBean与这两种格式相互转换的组件,那就是XStream和JSON-lib。这里我简单记下XStream的用法。其实相类似的工具早已有之。如果用过DWR的同志,一定有印像,DWR进行远程......
  • 228. 汇总区间(stringstream)
    字符串处理:动态规划,双指针,栈,计数,字符串流 本题要将一个格式化的字符串容器作为答案,可利用双指针和stringstream来进行操作classSolution{public:vector<string>summaryRanges(vector<int>&nums){intn=nums.size();intl=0,r=0;......
  • Stream流操作
    1.说明stream流操作是java8引入的一个新概念,是一种对Java集合运算和表达的高阶抽象。主要是java8用来处理集合的,使我们的代码更简洁高效。特点:大大提高编码效率和降低代码的复杂度不是数据结构,不会保存数据要有终端操作流才会进行处理,也就是开始流动,如果没有终端操作的话,则......
  • Stream流将list装换为map
    首先定义的userList内容如下:[User(id=1,name=第一人,telephone=第一手机号,address=第一住址),User(id=2,name=第二人,telephone=第二手机号,address=第二住址),User(id=1,name=第三人,telephone=第三手机号,address=第三住址),User(id=1,name=第四人,telephone=第......
  • java stream常用方法
    1、筛选数据单条Studentstudent=students.stream().filter(o->o.getStuNo.equals(1001)).findAny().orElse(null);.orElse(null) 表示如果没有符合条件的学生则返回null多条List<Integer>stuNoList=students.stream().map(Student::getStuNo).collect(Collectors.to......
  • VCSA7.0访问提示no healthy upstream
    问题:打开VCSA7.0登录页面提示“nohealthyupstream”解决方法:一、登录https://172.22.1.250:5480设备管理后台,发现整体运行状况有警示,按照提示先解决log盘空间问题, 1、登录esxi主机查询vcenter在那个ESXI主机上,然后登录vcenter主机,或者通过ssh连接vcenter主机。 2、编辑......
  • lambda结合stream使用
    lambda与stream结合使用一、Stream1.Stream流的作用结合了Lambda表达式,简化集合、数组的操作2.Stream的使用步骤获取Stream流对象使用中间方法处理数据使用终结方法处理数据3.如何获取Stream流对象单列集合:Collection中的默认方法stream双列集合:不能直......