Java8中stream 流中常用方法

1.Arrays.asList();

该方法是将数组转化成List集合的方法。
java.util.Arrays;
List<String> list = Arrays.asList(String [] s);

注意:参数是一个数组,返回集合,且该集合只能遍历,不能添加删除操作,会报错
在这里插入图片描述
参考:https://blog.csdn.net/kzadmxz/article/details/80394351

String is= "1,2,3,4";
List<String> sss = Arrays.asList(StrUtil.split(is, ","));

2.Java8中stream 流中的collect()方法

一个stream不可以使用两次

(1)获取集合中Bean的某个属性的集合(重复:list,不重复:set)—(map + collect用法)

 Set<String> ids = list.stream().map(AdminUser::getPassword).collect(Collectors.toSet());
 List<String> ids = list.stream().map(AdminUser::getPassword).collect(Collectors.toList());

参数解读:list:实体类集合List
AdminUser:实体类
getPassword:实体类中的get方法

  /*调用String 方法*/
List<String> collect =list.stream().map(String::toUpperCase).collect(Collectors.toList());
System.out.println(collect); //[A, B, C, D]
  /*获取集合元素的倍数*/
List<Integer> num = Arrays.asList(1,2,3,4,5);
List<Integer> collect1 = num.stream().map(n -> n * 2).collect(Collectors.toList());
System.out.println(collect1); //[2, 4, 6, 8, 10]

3.Java8中stream 里面的 Collectors.toMap 用法

常用于list 转 map

Collectors.toMap 有三个重载方法:

toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper);
toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper,
        BinaryOperator<U> mergeFunction);
toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper,
        BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier);

参数含义分别是:

keyMapper:Key 的映射函数

valueMapper:Value 的映射函数

mergeFunction:当 Key 冲突时,调用的合并方法

mapSupplier:Map 构造器,在需要返回特定的 Map 时使用

	List<Person> list = new ArrayList();
		list.add(new Person(1, "haha"));
		list.add(new Person(2, "rere"));
		list.add(new Person(3, "fefe"));

/*value是一个对象*/
Map<Integer, Person> mapp = list.stream().collect(Collectors.toMap(Person::getId, Function.identity()));
或
Map<Integer, Person> mapp = list.stream().collect(Collectors.toMap(Person::getId, t->t));
输出:{1=test.Person@4b9385, 2=test.Person@1311334, 3=test.Person@2a0b20}

/*value是对象的某个属性*/
Map<Integer, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName));
输出:{1=haha, 2=rere, 3=fefe}

当 Key 冲突时,调用的合并方法

List<Person> list = new ArrayList();
		list.add(new Person(1, "haha"));
		list.add(new Person(1, "rere"));
		list.add(new Person(3, "fefe"));
Map<Integer, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName,(n1,n2)-> n1+n2));	
输出:{1=haharere, 3=fefe}

当 Key 冲突时,自定义key

/*两个属性组合成key,映射对象*/
Map<Integer, String> map = list.stream().collect(Collectors.toMap(k->k.getId() + k.getName(),Function.identity());	
输出:{1haha=test.Person@4b9385,2rere=test.Person@1311334, 3fefe=test.Person@2a0b20}

第四个参数(mapSupplier)用于自定义返回 Map 类型,比如我们希望返回的 Map 是根据 Key 排序的,可以使用如下写法:

Map<Integer, String> map = 
list.stream().collect(Collectors.toMap(Person::getId, Person::getName,(n1,n2)-> n1,TreeMap::new));	

4.Java8中stream 里面的 Collectors.toSet 用法

//1.将数据收集进一个集合(Stream 转换为 Set,不允许重复值,没有顺序)
	Stream<String> language = Stream.of("java", "python", "C++","php","java");
	Set<String> setResult = language.collect(Collectors.toSet());
	setResult.forEach(System.out::println);

5.Java8中stream 里面的 Collectors.toList 用法

//1.将数据收集进一个列表(Stream 转换为 List,允许重复值,有顺序)
//创建流
		Stream<String> language = Stream.of("java", "python", "C++","php","java");
		List<String> listResult = language.collect(Collectors.toList());
		result.forEach(System.out::println);

//2.stream()代替流
	  List<String> list = Arrays.asList("java", "python", "C++","php","java");
      List<String> listResult = list.stream().collect(Collectors.toList());
      listResult.forEach(System.out::println);

6.Java8中stream 里面的 Collectors.toCollection 用法

 	  List<String> list = Arrays.asList("java", "python", "C++","php","java");  
      //用LinkedList收集
      List<String> linkedListResult = list.stream().collect(Collectors.toCollection(LinkedList::new));
      linkedListResult.forEach(System.out::println);
      
      //用CopyOnWriteArrayList收集
      List<String> copyOnWriteArrayListResult = 
      list.stream().collect(Collectors.toCollection(CopyOnWriteArrayList::new));
      copyOnWriteArrayListResult.forEach(System.out::println);
      
      //用TreeSet收集
      TreeSet<String> treeSetResult = list.stream().collect(Collectors.toCollection(TreeSet::new));
      treeSetResult.forEach(System.out::println);

7.Java8中stream 里面的 Collectors.joining() 用法

		List<String> list = Arrays.asList("java", "python", "C++","php","java");
	    //直接将输出结果拼接
        System.out.println(list.stream().collect(Collectors.joining()));
        //每个输出结果之间加拼接符号“|”
        System.out.println(list.stream().collect(Collectors.joining(" | ")));
        //输出结果开始头为Start--,结尾为--End,中间用拼接符号“||”
        System.out.println(list.stream().collect(Collectors.joining(" || ", "Start--", "--End")));
输出:
javapythonC++phpjava
java | python | C++ | php | java
Start--java || python || C++ || php || java--End

8.Java8中stream 里面的 filter 用法

顾名思义–过滤器的作用 stream.filter(对象限制条件);
例如:

//查询出sysOrgId是100的集合。
		List<VehicleInfo> vehicleInfos = list.stream().filter(a ->100==a.getSysOrgId()).collect(Collectors.toList());
	Optional<User> user = list.stream().filter(a ->100==a.getId()).findFirst();
		//判断user是不是空的
		if (user.isPresent()) {
		//把optional的值给实体类
		User u = user.get();
		System.out.println(u); 
		}
/*Optional:可能包含也可能不包含非空值的容器对象。*/
Optional.isPresent();//是否存在值,返回booleal
Optional.get();//获取值
Optional.orElse(T other)//如果值为null,返回other
Optional.findFirst();//查询出符合filter条件的第一个,返回值是Optional类型
Optional.forEach();//遍历操作

9.Java8中stream 里面的 match用法

match()是filter()的缩写版本,返回结果只有boolean类型,返回是否匹配。

allMatch:Stream 中全部元素符合传入的 predicate,返回 true

anyMatch:Stream 中只要有一个元素符合传入的 predicate,返回 true

noneMatch:Stream 中没有一个元素符合传入的 predicate,返回 true

它们都不是要遍历全部元素才能返回结果。例如 allMatch 只要一个元素不满足条件,就 skip 剩下的所有元素,返回 false。

boolean flag = demos.stream()
            .map(Demo::getName)
            .filter(condition::contains)
            .findAny()
            .isPresent();
/*这两个效果一致*/
boolean flag = demos.stream()
            .map(Demo::getName)
            .anyMatch(condition::contains);

10.Java8中stream 里面的 reduce用法

常用语字符串拼接和数值运算

// reduce用例
// 字符串连接,concat = "ABCD"
String concat = Stream.of("A", "B", "C", "D").reduce("", String::concat); 
// 求最小值,minValue = -3.0
double minValue = Stream.of(-1.5, 1.0, -3.0, -2.0).reduce(Double.MAX_VALUE, Double::min); 
// 求和,sumValue = 10, 有起始值
int sumValue = Stream.of(1, 2, 3, 4).reduce(0, Integer::sum);
// 求和,sumValue = 10, 无起始值,返回Optional,所以有get()方法
sumValue = Stream.of(1, 2, 3, 4).reduce(Integer::sum).get();
// 过滤,字符串连接,concat = "ace"
concat = Stream.of("a", "B", "c", "D", "e", "F")
    .filter(x -> x.compareTo("Z") > 0)
    .reduce("", String::concat);

11.Java8中stream 里面用 Collectors 来进行 reduction 操作

groupingBy/partitioningBy 用法

/*按照Bean某个属性归组*/
Map<Integer, List<Person>> personGroups =list.stream().collect(Collectors.groupingBy(Person::getAge));

/*只有两个分组 true & false*/
Map<Boolean, List<Person>> children = list.stream().collect(Collectors.partitioningBy(p -> p.getAge() < 18));
System.out.println("Children number: " + children.get(true).size());
System.out.println("Adult number: " + children.get(false).size());
//结果
Children number: 23 
Adult number: 77
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaStream流的常用方法包括获取Stream流、方法和终结方法。 获取Stream流的方法有两种:集合获取Stream流和数组获取Stream流。集合获取Stream流可以使用集合类的stream()方法,例如Map的keySet()方法可以获取键流,values()方法可以获取值流,entrySet()方法可以获取键值对流。数组获取Stream流可以使用Arrays类的stream()方法,将数组转换为Stream流。 方法是对Stream流进行操作的方法,一次操作完毕之后,还可以继续进行其他操作。常用方法包括filter()、map()、flatMap()、distinct()、sorted()、limit()和skip()等。filter()方法用于过滤元素,map()方法用于对元素进行映射,flatMap()方法用于扁平化处理,distinct()方法用于去重,sorted()方法用于排序,limit()方法用于限制元素数量,skip()方法用于跳过元素。 终结方法Stream流的最后一个操作,一个Stream流只能有一个终结方法常用的终结方法包括forEach()、collect()、count()、min()、max()、reduce()和toArray()等。forEach()方法用于遍历元素,collect()方法用于将元素收集到集合,count()方法用于统计元素数量,min()方法用于获取最小值,max()方法用于获取最大值,reduce()方法用于对元素进行归约操作,toArray()方法用于将元素转换为数组。 综合应用Stream流的常用方法可以实现对数据的筛选、转换、排序、统计等操作,提高代码的简洁性和可读性。 #### 引用[.reference_title] - *1* *2* *3* [Java 基础进阶篇(十二):Stream常用方法总结](https://blog.csdn.net/weixin_43819566/article/details/130537949)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值