Java8:stream的使用及备忘(java stream操作)

Java8:stream的使用及备忘(java stream操作)

编程文章jaq1232025-05-02 17:43:4515A+A-

一、描述

Stream 是 Java8的一个亮点,更是 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 提供了一种高效且易于使用的处理数据的方式。

Stream流的具体用法

1.流的创建

List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
//顺序流
Stream<String> stringStream = list.parallelStream();
//并行流

2.将数组转成流

Integer[] nums = new Integer[]{0,2,9,5};
Stream<Integer> Integerstream = Arrays.stream(nums);

3.使用BufferedReader.lines()方法,将每行内容转成流

Stream<String> lineStream2 = new BufferedReader(new FileReader("E:\\test_stream.txt")).lines();

4. 流的中间操作

filter: 过滤流中的某些元素

limit(n): 获取n个元素,限制获取元素的个数

skip(n): 跳过n元素,配合limit(n)可实现分页

distinct: 通过流中元素的 hashCode() 和 equals() 去除重复元素

Stream<Integer> stream = Stream.of(6,6,6,12,22,12,213,111,7,9,10);

Stream<Integer> streamFilter = stream.filter(item -> item > 10) // 12 22 12 213 111

.distinct() //12 22 213 111

.skip(2) //213 111

.limit(1);//213

streamFilter.forEach(System.out::println);

5 map 和flatmap

/ 1. map的使用实例

List<String> list = Arrays.asList("a,b,c", "1,2,3");

// 去掉字符串中所有的,

List<String> collect = list.stream().map(s -> s.replaceAll(",", "")).collect(Collectors.toList());

// collect集合内容为:{abc,123}

System.out.println(collect);

// 2. flatMap 接收一个函数作为参数,将流中的每个值都换成另一个流,

// 然后把所有流连接成一个流。

Stream<String> stringStream = list.stream().flatMap(s -> {

// 将字符串以,分割后得到一个字符串数组

String[] split = s.split(",");

// 然后将每个字符串数组对应流返回,flatMap会自动把返回的所有流连接成一个流

Stream<String> stream = Arrays.stream(split);

return stream;

});

6.排序:sorted

stream.sorted(); // 按照sortNo排序

stream.sorted((x,y)->Integer.compare(x.getSortNo(),y.getSortNo()));

7.流的终止操作

allMatch,noneMatch,anyMatch,findFirst,findAny,count,max,min

// 匹配和聚合

allmatch,noneMatch,anyMatch用于对集合中对象的某一个属性值是否存在判断。

allMatch全部符合该条件返回true,

noneMatch全部不符合该断言返回true

anyMatch 任意一个元素符合该断言返回true

// 实例:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

boolean allMatch = list.stream().allMatch(e -> e > 10); //false

boolean noneMatch = list.stream().noneMatch(e -> e > 10); //true

boolean anyMatch = list.stream().anyMatch(e -> e > 4); //true

// 其他一些方法

findFirst:返回流中第一个元素

String firstMatchedName = memberNames.stream()

.filter((s) -> s.startsWith("L"))

.findFirst().get();

findAny:返回流中的任意元素

count:返回流中元素的总个数

long totalMatched = memberNames.stream()

.filter((s) -> s.startsWith("A"))

.count();

max:返回流中元素最大值

min:返回流中元素最小值

8,实操【节选】

List<RouteBean> routeBeans = channelConfigs.stream()

.filter(payProviderChannelConfig ->

payProviderChannelConfig.getInterfaceCode() == PaySignEnum.ALLIN_INTERFACE_TYPE_PAY.getCode())

.map(payProviderChannelConfig -> RouteBean.builder()

.providerChanl(payProviderChannelConfig.getProviderChannel())

.providerChanlName(payProviderChannelConfig.getProviderChanlName())

.interfaceCode(payProviderChannelConfig.getInterfaceCode().toString())

.interfaceCodeName(payProviderChannelConfig.getInterfaceCodeName())

.level(payProviderChannelConfig.getPayLevel())

.channelFeeExpression(

debitBankConfigMap.get(

String.format("%s_%s", payProviderChannelConfig.getProviderChannel().toString(),

payProviderChannelConfig.getInterfaceCode().toString())) == null ? null :

debitBankConfigMap.get(

String.format("%s_%s", payProviderChannelConfig.getProviderChannel().toString(),

payProviderChannelConfig.getInterfaceCode().toString())).getChannelFeeExpression())

.singleLimitAmount(

debitBankConfigMap.get(

String.format("%s_%s", payProviderChannelConfig.getProviderChannel().toString(),

payProviderChannelConfig.getInterfaceCode().toString())) == null ? null :

debitBankConfigMap.get(

String.format("%s_%s", payProviderChannelConfig.getProviderChannel().toString(),

payProviderChannelConfig.getInterfaceCode().toString()))

.getSingleLimitAmount()

)

.serviceName(payProviderChannelConfig.getServiceName()))

.build())


.map(routeBean -> {

if (debitBankConfigMap.containsKey(new StringBuilder().append(routeBean.getProviderChanl())

.append("_")

.append(routeBean.getInterfaceCode())

.toString())) {

} else {

routeBean.setIsSatisfy(false);

routeBean.setConditional("不支持操作");

}

return routeBean;

})

.collect(Collectors.toList());

点击这里复制本文地址 以上内容由jaq123整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

苍茫编程网 © All Rights Reserved.  蜀ICP备2024111239号-21