stream流
java 的 stream 流操作是一种简洁而强大的处理集合数据的方式,允许对数据进行高效的操作,如过滤、映射、排序和聚合。stream api 于 java 8 引入,极大地简化了对集合(如 list、set)等数据的处理。
一、创建 stream
从集合创建:
list<string> list = arrays.aslist("a", "b", "c"); stream<string> stream = list.stream();
从数组创建:
string[] array = {"a", "b", "c"}; stream<string> stream = arrays.stream(array);
使用 stream.of 方法:
stream<string> stream = stream.of("a", "b", "c");
二、中间操作
filter:过滤符合条件的元素。
stream.filter(s -> s.startswith("a"));
map:将每个元素转换为另一种形式。
stream.map(string::touppercase);
sorted:排序流中的元素
stream.sorted(); stream.sorted(comparator.reverseorder());
distinct:去除重复元素
stream.distinct();
limit:截取流中的前 n 个元素
stream.limit(3);
skip:跳过流中的前 n 个元素
stream.skip(2);
三、终端操作
foreach:对流中每个元素执行操作。
stream.foreach(system.out::println);
collect:将流转换为另一种形式(如 list、set)
list<string> resultlist = stream.collect(collectors.tolist());
count:返回流中元素的个数
long count = stream.count();
max:最大值
//数组获取最大值 int asint = arrays.stream(nums).max().getasint(); system.out.println("数组中最大值: "+asint); //list获取最大值 integer integer = numlist.stream().max(integer::compare).get(); system.out.println("list中最大值:"+integer);
reduce:将流中的元素组合为一个值。
optional<string> concatenated = stream.reduce((s1, s2) -> s1 + s2);
anymatch、allmatch、nonematch:检测流中的元素是否匹配给定的条件
boolean anystartswitha = stream.anymatch(s -> s.startswith("a"));
并行流
list<string> list = arrays.aslist("a", "b", "c"); list.parallelstream().foreach(system.out::println);
四、数组转list
import java.util.arrays; import java.util.list; import java.util.stream.collectors; /** * @description: * @author: thatmonth * @create: 2024-08-16 16:57 **/ public class test49 { public static void main(string[] args) { int[] nums = new int[]{2,1,5,6,2,3}; system.out.println("原始数组: "+arrays.tostring(nums)); //数组转list list<integer> numlist = arrays.stream(nums).boxed().collect(collectors.tolist()); system.out.println("数组转list: "+numlist); //list转数组 int[] array = numlist.stream().maptoint(integer::intvalue).toarray(); system.out.println("list转数组: "+arrays.tostring(array)); } }
五、综合使用
import java.util.arrays; import java.util.list; import java.util.stream.collectors; /** * @description: * @author: thatmonth * @create: 2024-08-16 16:57 **/ public class test { public static void main(string[] args) { int[] nums = new int[]{2,1,5,6,2,3}; system.out.println("原始数组: "+arrays.tostring(nums)); //数组获取最大值 int asint = arrays.stream(nums).max().getasint(); system.out.println("数组中最大值: "+asint); //数组转list list<integer> numlist = arrays.stream(nums).boxed().collect(collectors.tolist()); system.out.println("数组转list: "+numlist); //list获取最大值 integer integer = numlist.stream().max(integer::compare).get(); system.out.println("list中最大值:"+integer); //条件过滤 list<integer> collect = numlist.stream().filter(e -> e > 3).collect(collectors.tolist()); system.out.println("filter 条件过滤大于3的: "+collect); //map遍历修改,(flatmap返回是最低一层的数据结构,如list<list<student>>返回的是list<student>) list<integer> collect1 = numlist.stream().map(e -> ++e).collect(collectors.tolist()); system.out.println("map 遍历修改加1: "+collect1); //规约求和 int reduc = numlist.stream().reduce(100, (e1, e2) -> e1 + e2); system.out.println("reduce 规约求和: "+reduc); //自定义排序 list<integer> collect2 = numlist.stream().sorted((e1,e2)->e1-e2).collect(collectors.tolist()); system.out.println("sorted 自定义排序: "+collect2); //任意匹配 boolean m = numlist.stream().anymatch(e1->e1>100); system.out.println("anymatch 是否存在大于100的: "+m); //分页 list<integer> collect3 = numlist.stream().skip(2).limit(3).collect(collectors.tolist()); system.out.println("skip,limit 分页查询从第2条起,查3条: "+collect3); //去重 list<integer> collect4 = numlist.stream().distinct().collect(collectors.tolist()); system.out.println("distinct 去重: "+collect4); //转字符串并用‘--'连接 string collect5 = numlist.stream().map(e ->e.tostring()).collect(collectors.joining("--")); system.out.println("collectors.joining 转字符串并用‘--'连接: "+collect5); //list转数组 int[] array = numlist.stream().maptoint(integer::intvalue).toarray(); system.out.println("list转数组: "+arrays.tostring(array)); } }
示例:
到此这篇关于java数组转list及stream的基本方法使用教程的文章就介绍到这了,更多相关java数组转list内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论