java8流的简单介绍
今天给各位分享java8流的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java8中如何将多个集合的数据拼接成一个统一的流
- 2、Java8中List直接写forEach与调用.stream().forEach()有何差别?
- 3、java8的stream().mapToInt()什么意思?
- 4、java 8 流式计算 mapToDouble 会丢失精度吗?
- 5、Java8有哪些新特性
- 6、Java中能取出List里的相同数据;比如{ { 1,2,3,4,5,6},{11,22,33,44,55,6},{12,13,14,15,16,6} };
java8中如何将多个集合的数据拼接成一个统一的流
java8中stream的提供了一个拼接流的方法Stream.concat,可以将两个stream拼接成一个stream, 保持了两个stream中的元素顺序。
那么如果我们需要对多个集合中的元素拼接成一个stream来统一处理,可以怎么做呢?
比如有三个CollectionString c1, c2, c3.
方法一,使用Stream.concat方法来拼接,可以使用一个for循环来处理。
private static StreamString concat1(ListCollectionString collections) {
Stream result = Stream.empty();
for (CollectionString strings : collections) {
result = Stream.concat(result, strings.stream());
}
return result;
}
方法二,使用flatMap方法,将集合变成stream, 再压平
private static StreamString concat2(ListCollectionString collections) {
return collections.stream()
.flatMap(Collection::stream);
}
对于不同集合类型的数据,如何做成一个统一的流?还是可以使用flatMap方法来做
方法三:
private static StreamString concat3(ListString s1,String[] s2, SetString s3) {
return Stream.of(s1.stream(), Arrays.stream(s2), s3.stream())
.flatMap(Function.identity());
}
方法三和方法二相比,可以使用不同类型的集合类型来拼接流,方法二在拥有共同基类的情况下使用会显得简洁很多。
Java8中List直接写forEach与调用.stream().forEach()有何差别?
java8中,引入了流的概念,主要的目的还是为了,提高代码的可读性和编写代码时的实效性,实际上,在简单的代码逻辑中,流的优势并体现不出来,但是在复杂的业务操作逻辑中,流的优势就很大了。
那你应该注意的,不是foreach的区别,而是用传统的集合工具实现循环,和用流的概念来实现循环的区别。
所以还是认真的了解流(stream)的概念
java8的stream().mapToInt()什么意思?
Stream(流)是一个来自数据源的元素队列并支持聚合操作
strong元素队列 strong=""元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。
数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。
聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。
可以试试这个输出什么:
String[] strarr = {"abc", "defg", "vwxyz"};
int iSum = Arrays.stream(strarr)
.mapToInt(s - s.length())
.sum();
System.out.println("长度和: "+iSum);
扩展资料:
Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。例如,Java提供产生图形用户接口部件的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(java.io包)和支持网络功能的类(java.net包)。
参考资料来源:百度百科-Java
java 8 流式计算 mapToDouble 会丢失精度吗?
ListString list = Arrays.asList("11.11555", "11.225555", "11.35553");
list.stream().mapToDouble(p - Double.parseDouble(p)).forEach(System.out::println);
mapToDouble应该不会丢失精度,这一步操作只是转换而已。丢失应该会在统计计算的时候丢失
Java8有哪些新特性
jdk1.8的新特性包括如下:
一、接口的默认方法与静态方法,也就是接口中可以有实现方法
二、Lambda 表达式
三、函数式接口与静态导入
四、Lambda 作用域
在lambda表达式中访问外层作用域和老版本的匿名对象中的方式很相似。你可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量。
五、访问局部变量,等等其他新特性。
Java中能取出List里的相同数据;比如{ { 1,2,3,4,5,6},{11,22,33,44,55,6},{12,13,14,15,16,6} };
寻找相同的数据, 可以使用多种方式,下面简单介绍2种
第一种: 循环遍历,然后在把每一个元素,在其他集合里查找, 如果都存在该元素,就把这个元素保存起来
第二种: java8流处理, 原理差不多, 但是语法比较简洁
稍微注意的是list1 = {'A','A','B'}和list2 = {'A','C'} 如果粗糙的求交集,会得到一个交集结果{'A','A'}, 但是如果要严格取交集那么结果是一个'A'
解决起来很简单, 创造一个boolean[] b2=new boolean[list2.size]; 该boolean数组用于标记,list2的元素,哪些被使用了,哪些没有被使用.被使用的立刻标记为true .下次不再使用.
简单的参考代码: 可以按照自己的需求进行扩展和完善
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
public class Demo1 {
//为了方便, 全部定义成静态属性,方便静态方法内使用
static ArrayListInteger list1 = new ArrayListInteger(Arrays.asList(1, 2, 3, 4, 5, 6));
static ArrayListInteger list2 = new ArrayListInteger(Arrays.asList(11, 22, 33, 44, 55, 6));
static ArrayListInteger list3 = new ArrayListInteger(Arrays.asList(12, 13, 14, 15, 16, 6));
public static void main(String[] args) {
test1();//java8 流处理
test2();//传统遍历循环进行处理
}
//流处理求交集
private static void test1() {
System.out.println("list1,list2,list3的交集是:");
list1.stream().filter(num - list2.contains(num) list3.contains(num)).collect(Collectors.toList()).stream()
.forEach(System.out::println);
}
//循环遍历求交集
private static void test2() {
ArrayListInteger result = new ArrayListInteger();
for (Integer num : list1) {
if (list2.contains(num) list3.contains(num)) {
result.add(num);
}
}
System.out.println("list1,list2,list3的交集是:");
for (Integer i : result) {
System.out.println(i);
}
}
}
java8流的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java8流的信息别忘了在本站进行查找喔。
发布于:2022-12-06,除非注明,否则均为
原创文章,转载请注明出处。