基础题

练习一:Pedicate接口使用

1.请在测试类main方法中完成以下需求
已知有Integer[] arr = {-12345, 9999, 520, 0,-38,-7758520,941213}
a)使用lambda表达式创建Predicate对象p1,p1能判断整数是否是自然数(大于等于0)
b)使用lambda表达式创建Predicate对象p2,p2能判断整数的绝对值是否大于100
c)使用lambda表达式创建Predicate对象p3,p3能判断整数是否是偶数

遍历arr,仅利用已创建的Predicate对象(不使用任何逻辑运算符),完成以下需求
i.打印自然数的个数
ii.打印负整数的个数
iii.打印绝对值大于100的偶数的个数
iv.打印是负整数或偶数的数的个数

答案

import java.util.function.Predicate;
public class Test03 {public static void main(String[] args) {Integer[] arr = {-12345, 9999, 520, 0,-38,-7758520,941213};//a)   使用lambda表达式创建Predicate对象p1,p1能判断整数是否是自然数Predicate<Integer> p1 = (s) -> s>=0;//b)   使用lambda表达式创建Predicate对象p2,p2能判断整数的绝对值是否大于100Predicate<Integer> p2 = (s) -> Math.abs(s)>100;//c)   使用lambda表达式创建Predicate对象p3,p3能判断整数是否是偶数Predicate<Integer> p3 = (s) -> s%2==0;//e)   遍历arr,仅利用已创建的Predicate对象(不使用任何逻辑运算符),完成以下需求int count1 = 0;int count2 = 0;int count3 = 0;int count4 = 0;for (Integer i : arr) {//统计自然数个数if (p1.test(i)){count1++;}//统计负整数个数if (p1.negate().test(i)){count2++;}//统计绝对值大于100的偶数个数if (p2.and(p3).test(i)){count3++;}//统计是负整数或偶数的数的个数if (p1.negate().or(p3).test(i)){count4++;}}//分别打印结果System.out.println("自然数的个数为:"+count1);System.out.println("负整数的个数为:"+count2);System.out.println("绝对值大于100的偶数的个数为:"+count3);System.out.println("是负整数或偶数的数的个数为:"+count4);}
}

练习二:Function接口使用

1.使用lambda表达式分别将以下功能封装到Function对象中
a)求Integer类型ArrayList中所有元素的平均数
b)将Map<String,Integer>中value存到ArrayList中
2.已知学生成绩如下
姓名 成绩
岑小村 59
谷天洛 82
渣渣辉 98
蓝小月 65
皮几万 70
3.以学生姓名为key成绩为value创建集合并存储数据,使用刚刚创建的Function对象求学生的平均成绩

答案

import java.util.*;
import java.util.function.Function;
public class Test04 {public static void main(String[] args) {//1.   使用lambda表达式分别将以下功能封装到Function对象中//a)   求Integer类型ArrayList中所有元素的平均数Function<ArrayList<Integer>,Integer> f1 = (list)->{Integer sum = 0;for (Integer i : list) {sum+=i;}return sum/list.size();};//b)   将Map<String,Integer>中value存到ArrayList<Integer>中Function<Map<String,Integer>,ArrayList<Integer>> f2 = (map)->{/*ArrayList<Integer> list = new ArrayList<>();for (String s : map.keySet()) {Integer i = map.get(s);list.add(i);}*/Collection<Integer> values = map.values();ArrayList<Integer> list = new ArrayList<>();list.addAll(values);return list;};//2 将学生姓名和成绩封装到map中Map<String,Integer> map = new HashMap<String, Integer>();map.put("岑小村", 59);map.put("谷天洛", 82);map.put("渣渣辉", 98);map.put("蓝小月", 65);map.put("皮几万", 70);//利用Function求平均成绩Integer avg = f2.andThen(f1).apply(map);System.out.println("学生平均成绩为:"+avg);}
}

练习三:如何获取流

问题:
简述单列集合、双列集合、数组分别如何获取Stream流对象,并进行演示

答:

1、java.util.Collection接口中加入了default方法stream()获取流对象,因此其所有实现类均可通过此方式获取流。
2、java.util.Map接口想要获取流,先通过keySet()、values()或entrySet()方法获取键、值或键值对的单列集合,再通过stream()获取流对象。
3、数组获取流,使用Stream接口中的的静态方法of(T...values)获取流。
public static void main(String[] args) {List<String> list = new ArrayList<>();Stream<String> stream1 = list.stream();Set<String> set = new HashSet<>();Stream<String> stream2 = set.stream();Map<String, String> map = new HashMap<>();Stream<String> keyStream = map.keySet().stream();Stream<String> valueStream = map.values().stream();Stream<Map.Entry<String,String>>entryStream = map.entrySet().stream();String[] array = {"东邪", "西毒", "南帝", "北丐", "中神通"};Stream<String> stream = Stream.of(array);}

练习四:过滤:filter、结果收集(数组)

问题:
有如下7个元素黄药师,冯蘅,郭靖,黄蓉,郭芙,郭襄,郭破虏,使用Stream将以郭字开头的元素存入新数组

import java.util.stream.Stream;
public class Test {public static void main(String[] args) {Stream<String> stream = Stream.of("黄药师", "冯蘅", "郭靖", "黄蓉", "郭芙", "郭襄", "郭破虏");String[] guos = stream.filter(s -> s.startsWith("郭")).toArray(String[]::new);}
}

练习五:取用前几个:limit、跳过前几个:skip

问题:
已知ArrayList集合中有如下元素{陈玄风、梅超风、陆乘风、曲灵风、武眠风、冯默风、罗玉风},使用Stream
1、取出前2个元素并在控制台打印输出。
2、取出后2个元素并在控制台打印输出。

答:

import java.util.ArrayList;
public class Test04 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("陈玄风");list.add("梅超风");list.add("陆乘风");list.add("曲灵风");list.add("武眠风");list.add("冯默风");list.add("罗玉风");list.stream().limit(2).forEach(System.out::println);list.stream().skip(list.size() - 2).forEach(System.out::println);}
}

练习六:映射:map、逐一消费:forEach

问题:
有如下整数1,-2,-3,4,-5
使用Stream取元素绝对值并打印

答:

import java.util.stream.Stream;
public class Test {public static void main(String[] args) {Stream<Integer> stream = Stream.of(1, -2, -3, 4,-5);stream.map(Math::abs).forEach(System.out::println);}
}

练习七:组合:concat、结果收集(list)

问题:
已知数组arr1中有如下元素{郭靖,杨康},arr2中有如下元素{黄蓉,穆念慈},使用Stream将二者合并到List集合

答:

import java.util.stream.Stream;
public class Test {public static void main(String[] args) {Stream<String> streamA = Stream.of("郭靖", "杨康");Stream<String> streamB = Stream.of("黄蓉", "穆念慈");List<String> strList = Stream.concat(streamA, streamB).collect(Collectors.toList());}
}

练习八:获取并发流

问题:
请分别写出获取并发流的两种方式。

答:

public class Test {public static void main(String[] args) {Collection<String> coll = new ArrayList<>();Stream<String> parallelStream1 = coll.parallelStream();Stream<Integer> parallelStream2 = Stream.of(100, 200, 300, 400).parallel();}
}

Java Stream流习题答案相关推荐

  1. java Stream 流

    java Stream 流 Stream 流 流的创建 流的转化 Optianal 流的计算 Stream 流 1. Stream的定义 来自数据源的支持聚合操作的元素序列. 即一个流对外提供接口,接 ...

  2. 测试Java Stream流 parralle与 sequential的效率

    测试Java Stream流 parralle与 sequential的效率 实验环境 操作系统:win10 处理器:Intel i5-4200U 2核4线程 Java版本:1.8 实验方案 统计大小 ...

  3. android应用程序设计张思民课后答案,Java语言程序设计习题答案(清华大学出版杜)张思民版...

    Java语言程序设计习题答案(清华大学出版杜)张思民版 更新时间:2017/2/6 12:39:00  浏览量:568  手机版 第1章 Java概述 [1]为什么说Java的运行与计算机硬件平台无关 ...

  4. Java stream流式计算详解

    Java stream流式计算详解 1. Stream概述 1.1 Stream简介 1.2 Stream分类 2. Stream操作 2.1 Stream创建 2.2 Stream无状态操作 2.3 ...

  5. Java Stream流基础

    Java Stream流基础 何为Steam流? Stream 是对集合数组对象功能的增强,其专注于对集合数组对象进行各种非常便利.高效的聚合操作,或者大批量数据操作.通常我们需要多行代码才能完成的操 ...

  6. Java Stream流之求和

    Java Stream流之求和 流方式实现 基本数据类型 和 包装类型 的一位数组求和 package top.yangbocsu;import java.util.Arrays;/*** @auth ...

  7. Java Stream(流)的分类, 四大基本流的介绍

    上一篇文章已经介绍过什么是流, 以及流的基本概念 http://blog.csdn.net/nvd11/article/details/29917065 本文主要介绍java四大基本流的方法. 一, ...

  8. Java - Stream流详解

    文章目录 前言 大家好,好久不见了,最近由于实训的影响导致拖更了,在更新这一次估计javaSE基本上就算是完结了,还有一些落下的后面也会补上的,下次见面就是数据结构了 尽情期待吧!那么就让我们步入St ...

  9. Java Stream流的概念

    为什么80%的码农都做不了架构师?>>>    1. Java的流分为 Inputstream 和 OutputStream: 2. 流(stream)的概念源于UNIX中管道(pi ...

最新文章

  1. oracle 条件反转,Oracle反转倒置函数
  2. 如何用node命令和webpack命令传递参数 转载
  3. 2016和2017的区别就是昨晚和今早
  4. java使用Encoding导什么包_String getEncoding()
  5. 悟透JavaScript
  6. Citus高可用方案演进介绍
  7. markdown一边写一边预览_MarkDown使用笔记
  8. Python 最常见的 170 道面试题解析:2019 最新
  9. Rmarkdown使用rvest包实现对静态网页数据抓取
  10. Helio for mac(音乐创作工具)
  11. win10 ie浏览器卸载后无法重启,试了网上各种方法都无法重启
  12. 一个实际电路的原理图是怎样设计出来的?
  13. 提到图像数据脱敏,看这家公司如何理解
  14. TCP FIN扫描探测原理
  15. 数据结构(C语言)——线性表(定义,基本操作)
  16. 图数据库发展趋势概览
  17. 蜡烛图(K线图)-1简介
  18. 扩增子测序 查找引物是否去除
  19. setVisibility()设置过度动画
  20. React项目 antd 修改主题颜色

热门文章

  1. C++ variant (tcy)
  2. php文本输入数字,JavaScript实现文本框只能输入数字的方法介绍
  3. 统一异常处理解决方案
  4. 硬盘的分区和分区格式化类型详解
  5. php getrealpath,weblogic环境下getRealPath() called with unsafe问题的处理
  6. 13.live555mediaserver-describe请求与响应
  7. 从特征描述符到深度学习:计算机视觉发展20年
  8. 【私有云架构】Cloudstack 与 OpenStack:哪个更适合您?
  9. Cad二次开发之未知命令
  10. 基于STM32的MD5校验