java8流的简单介绍

博主:adminadmin 2022-12-06 19:12:09 72

今天给各位分享java8流的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

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流的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-06,除非注明,否则均为首码项目网原创文章,转载请注明出处。