collection为核心的接口,包含了多种不同类型的集合以及多种不同数据结构的实现的类

list  set queue都是在collection接口下的所以都有.add()方法

package cn.nefu.com;
import java.util.List;
import java.util.ArrayList;
import java.util.AbstractMap;
public class S47 {public static void main(String[] args){List<String> list=new ArrayList();//泛型限制了集合中元素的类型list.add("aaa");//有序list.add("bbb");list.add("ccc");for(int i=0;i<list.size();i++){System.out.println(list.get(i));}for(String s:list)//for-each循环输出,表示从list列表中拿出元素给s,直到空了为止{System.out.println(s);}}
}

list中的元素是有序的 list集合自己就做好了排序  list还可以包含重复元素,因为它 带有标号(操作系统自带的)

list是接口 所以不能实例化出对象(new) 要去帮助文档中去找基本实现的类  有很多 比较常见的如ArrayList(实现类)

list集合怎么取出元素,完成迭代?

1.利用list.size()方法 

2.利用for each语句 第一节课也讲过哦

其实for each语句就相当于类的封装了,便于使用  表示从list集合中取出元素,直到集合里面没有元素为止

注意:集合list当中可以放任何类型的元素,整型啊 double 字符串都可以 我们为了便于迭代时取出元素还为了让集合中的元素有约束所以引入了泛型的概念

当试图向集合中添加不匹配的类型对象时 编译错误

因为集合中不关心元素的具体类型,所以引出泛型  <E> ----它里面装的是引用类型

当声明元素类型为基本数据类型而不是引用数据类型时 编译出错

int double 这些是基本数据类型   要对所有基本数据类型进行封装  Integer Double---就是E

为什么要把它进行封装呢?因为它提供了一些好用的方法 提供双精度浮点数的一些方法

int   Integer.parseInt();

字符转成字符串  字符串转字符怎么转要会

集合list怎么去遍历  怎么去找

集合  怎么放怎么取   ?   迭代

迭代器功能   迭代器遍历

map引用对象-------它是接口 要用实现的类去new  put get

map集合遍历    去找这个里面有多少个键值

keyset  获得键值  for each   之后根据每一个键值输出每一个键值所对应的值


public class S47 {public static void main(String[] args){Iterator<String> iterater=list.iterator();//迭代器  模拟集合一次往下查询//获取迭代器while(iterator.hasNext()){System.out.println(iterator.next());}Map<Strint,Integer> map=new HashMap();map.put("200000",233)//自己指定键值   键值区别开value可以重复}
}

jdk1.8之后遍历----函数式编程   函数

函数式编程算是java中的另类了 

Lambada表达式-----Lambada允许把函数作为一个方法的参数(函数作为参数传到方法中)

lambada表达式不是单独存在的 它要和函数式接口/函数式编程结合在一起

(arg1, arg2) -> expression(函数体语句)

(arg1, arg2) -> {body}//无函数名  只使用

java.util.stream.Stream<T>接口 鉴于Java对集合操作的复杂性,Java8中引入Stream API,用于操作处理集合中的元素  有了这个流可以快速的对集合进行依次的遍历和操作   例如选择集合中的值,例如给集合中的值排序---------对集合中的元素进行流式的操作,改变了元素,没有改变集合中的元素值(不会回写到集合中)

对流的使用要用到lambada表达式

我们的流中就采用了函数式接口

package com.example21.collectionstream;public class Apple {public enum Color{RED, GREEN}private int id;private Color color;private int weight;public Apple(int id, Color color, int weight) {this.id = id;this.color = color;this.weight = weight;}public int getId() {return id;}public void setId(int id) {this.id = id;}public Color getColor() {return color;}public void setColor(Color color) {this.color = color;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}
}
package cn.nefu.com.zn;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class StreamTest {private static final List<Apple> APPLES = create();//常量大写,我们定义一个常量,里面是list类型,定义一个apple的筐,要装苹果
//所有的常量要不在构造方法的时候初始化,要不在定义的时候初始化//调用了创建方法,说明筐里要装什么东西private static List<Apple> create() {//创建方法返回的集合的引用Apple a = new Apple(1, Apple.Color.RED, 200);Apple a2 = new Apple(2, Apple.Color.GREEN, 250);Apple a3 = new Apple(3, Apple.Color.RED, 260);Apple a4 = new Apple(4, Apple.Color.GREEN, 230);List<Apple> apples = new ArrayList<>();apples.add(a);apples.add(a2);apples.add(a3);apples.add(a4);return apples;//苹果放到集合中,筐里装了四个苹果了,两个红的,两个绿的}public static void main(String[] args) {//forEach();/*filter(Apple.Color.RED).forEach(a -> System.out.println(a.getId()));*///map();sorted();// sortedReversed();// collect();//collectGroupingBy2();}/*** foreach循环* forEach()方法,简写//对集合遍历*/private static void forEach() {for (Apple a : APPLES) {//for each 去筐里取apple的对象 ,集合中每一个元素都是苹果System.out.println(a.getWeight());//对集合进行依次遍历}APPLES.forEach((Apple apple)-> {System.out.println(apple.getWeight());});//foreach一创建 这里面的形参就是在集合里取走的元素}//我们学习了lambada表达式之后  可以使用集合给我们提供的foreach()方法   这个方法里装什么?装的lambada表达式(函数接口)  对集合中的元素进行什么处理/*** 原实现。返回指定颜色的全部苹果*/private static List<Apple> getRedApples(Apple.Color c) {//要么是红色,要么是绿色,去筐里找指定的颜色,还得把颜色给返回来List<Apple> reds = new ArrayList<>();//new 一个listfor (Apple a : APPLES) {if (a.getColor().equals(c)) {//==号是引用空间的比较    reds.add(a);//这个筐去装红色的苹果}}return reds;}/*/*** 基于stream的过滤* 修改方法返回值,方法链* 比较源/新集合** @param c*/private static List<Apple> filter(Apple.Color c) {//所有集合return APPLES.stream()//返回集合流.filter(a -> a.getColor() == c)//不影响原集合   新的集合流.collect(Collectors.toList());//集合流变成集合}/*** 过滤指定颜色,且大于等于指定重量的苹果。2次过滤** @param c* @param weight*/private static void filter(Apple.Color c, int weight) {APPLES.stream().filter(a -> a.getColor() == c).filter(a -> a.getWeight() >= weight).collect(Collectors.toList())//组合  集成一下 把流变成集合   流中的元素聚合成集合.forEach(a -> System.out.println(a.getId()));}/*** 将重量映射为新集合,遍历打印* 简写*/private static void map() {APPLES.stream()//获取集合流.map(Apple::getWeight)//从这个流中获得新的集合----新的集合,里面放的苹果的重量.collect(Collectors.toList()).forEach(System.out::println);//运行某一个类调用方法.forEach(apple->System.out.println())}/*** 以重量顺序排序*/private static void sorted() {//升序APPLES.stream().sorted(Comparator.comparing(Apple::getWeight)).collect(Collectors.toList()).forEach(a -> System.out.println(a.getWeight()));}/*** 以ID逆序排序*/private static void sortedReversed() {APPLES.stream()//提供了对集合的一大堆操作.sorted(Comparator.comparing(Apple::getId).reversed()).collect(Collectors.toList()).forEach(a -> System.out.println(a.getId()));}/*** 获取颜色,分别按list/set聚合*/private static void collect() {APPLES.stream().map(Apple::getColor).collect(Collectors.toSet()).forEach(System.out::println);}/*** Map操作。基于颜色分组*/private static void collectGroupingBy() {Map<Apple.Color, List<Apple>> map = APPLES.stream().collect(Collectors.groupingBy(Apple::getColor));}/*** 以ID为键,苹果对象为值。自定义键值对* forEach遍历*/private static void collectGroupingBy2() {APPLES.stream().collect(Collectors.toMap(Apple::getId, a -> a)).forEach((k, v) -> {System.out.println(k + "/" + v.getColor());});}/*** 函数中,只能操作函数体外的常量*/private static void finalValue() {int count = 0;APPLES.forEach(a -> {System.out.println(count);});}/*** 2组过滤相同*/private static void getFilter() {Apple a1 = new Apple(1, Apple.Color.RED, 200);Apple a2 = new Apple(5, Apple.Color.GREEN, 240);List<Apple> newApples = List.of(a1, a2);List<Apple> oldApples = APPLES;List<Apple> apples = new ArrayList<>();for (Apple a : newApples) {for (Apple oa : oldApples) {if (a.getId() == oa.getId()) {apples.add(a);}}}apples.forEach(a -> System.out.println(a.getId()));System.out.println("--------------");List<Apple> apples2 = newApples.stream().filter(a -> oldApples.stream().anyMatch(oa -> oa.getId() == a.getId())).collect(Collectors.toList());apples2.forEach(a -> System.out.println(a.getId()));}
}

利用foreach方法  lambada表达式 配合  形参赋值

函数调用四次  形参名字随便

集合中都有这个方法  取值放函数形参里 形参输出  经常用 触发函数四次

集合流  不管存储  操作集合元素通道  筛选工作和获取流

利用流的方式去选苹果  苹果选颜色   按照函数规则去遍历

第十节 Java工具包-Collections 流--lambada表达式相关推荐

  1. 二十、Java基础--------IO流之其他对象

    在上面两篇文章中介绍了IO体系并详细介绍了字节流以及字符流,本文主要是讲述操作文件的File.转化流.标准输入与输出.Properties.打印流以及序列流. File File英文为"文件 ...

  2. 四十、Java中字节流和字符流介绍和区别

    @Author:Runsen @Date:2020/6/6 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  3. java collections_扫盲java.util.Collections工具包,学习排序、二分、洗牌、旋转算法

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 算法是数据结构的灵魂! 好的算法搭配上合适的数据结构,可以让代码功能大大的提升效率. ...

  4. Java这十年 - Java技术本纪 (3)

    Java技术本纪 Java虚拟机的  10    年 文/曹晓刚 Java虚拟机的起源与构造 当我们说到"Java"这个词的时候,指的是四个相互关联的概念:Java语言.Java ...

  5. JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!

    JAVA基础再回首(三十)--JAVA基础再回首完美结束,感概万千! 经过了几个月断断续续的回首java基础,终于回首完了,这一路走来体会到了枯燥.乏味.有趣,当然更多是收获,和第一遍学java基础的 ...

  6. ❤️熬夜爆肝十万字❤️Java最简单最全入门基础知识(一)(小白必备--推荐小白收藏)❤️

    写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的 java 语言代码把思路体现出来. 学习 ...

  7. java中Stream流

    一 概述 数据渠道.管道,用于操作数据源(集合.数组等)所生成的元素序列. 集合讲的是数据,流讲的是计算 即一组用来处理数组,集合的API. 二 Stream特点 1 Stream 不是数据结构,没有 ...

  8. 【Java 8】流(Stream API)

    本文参考书籍<Java 8实战>,陆明刚.劳佳  译,如有侵权,请联系删除! 在本章中,我们会使用这样一个例子:一个menu,它是一张菜肴列表: List<Dish> menu ...

  9. JAVA基础 IO流技术学习笔记

    目录 一.IO 流技术介绍 1.1  什么是IO? 1.2  流的概念 1.3  数据源 1.3.1 什么是数据源? 1.3.2数据源的分类 二.第一个简单的IO流程序 三.IO流经典写法(适用于任何 ...

最新文章

  1. NLP-Progress记录NLP最新数据集、论文和代码: 助你紧跟NLP前沿
  2. 仿微信的网络聊天室项目开发【完整源码讲解,Java一年工作经验面试题
  3. 分享一次 Java 内存泄漏的排查
  4. Websocket实现Java后台主动推送消息到前台
  5. matlab判断电话播键音,MATLAB电话拨号音的合成与识别
  6. 使用Eclipse和Open Liberty的Java EE 8上的Java 9
  7. [BZOJ3791]作业
  8. 从一个微型例子看“C/C++的内存分配机制”和“数组变量名与指针变量名”
  9. Matlab C-Mex Round 1
  10. TotalCommander增加回到桌面功能
  11. 3dmax导出fbx没有贴图_实例讲解ArcGIS 与 3DMax 结合建模
  12. 在 WINDOWS 7 的 XAMPP 安裝 MEMCACHED 擴展
  13. html页面拼接,表格数据
  14. irobot擦地机器人故障_irobot 380T拖地机器人故障判断及维修方法
  15. 2.深度学习之pytorch基础
  16. 微信公众号模板消息换行符号
  17. 人工智能本科学位的完整4年课程规划
  18. Chromium 基础库使用说明(入门必看)
  19. 人因工程典型应用-隧道灯光循序渐近
  20. 程序员的职业生涯个人规划(附上学习资料)

热门文章

  1. ISO26262标准概览
  2. hostname命令的使用
  3. Java implement意思_详解JAVA中implement和extends的区别
  4. caffe2及Detectron环境搭建
  5. jQuery选择器代码详解(一)——Sizzle方法
  6. Arduino 实现物理非自锁按键触发变为软件上自锁状态保持控制方法
  7. Java零基础必看学习教程,Java开发环境配置详解
  8. oracle odbc drivers,Actual ODBC drivers 介绍
  9. 几种高特键轴的简单总结
  10. 网络中数据传输过程的解析