Stream流
获取Stream流对象
-
集合获取Stream流对象 (使用 Collection 接口中的默认方法)
-
@Test public void test01() { //Collection集合获取 Collection<String> collection = new ArrayList<>(); collection.add("张三"); collection.add("李四"); collection.add("王五"); collection.add("赵六"); collection.add("钱七"); Stream<String> streamColl = collection.stream(); streamColl.forEach(item -> System.out.println(item)); //Map集合获取 Map<Integer, String> map = new HashMap<>(); map.put(1, "zhangsan"); map.put(2, "zhangsan"); map.put(3, "zhangsan"); map.put(4, "zhangsan"); map.put(5, "zhangsan"); Set<Map.Entry<Integer, String>> entries = map.entrySet(); Stream<Map.Entry<Integer, String>> streamMap = entries.stream(); streamMap.forEach(item -> System.out.println(item)); } -
数组获取Stream流对象 (使用 Arrays 数组工具类中的静态方法)
-
@Test public void test02() { Integer[] integers = {1, 2, 3, 4}; Stream<Integer> streamArr = Arrays.stream(integers); streamArr.forEach(item -> System.out.println(item)); } -
零散数据获取Stream流对象 (使用 Stream 类中的静态方法)
-
@Test public void test03() { Stream<String> stringStream = Stream.of("张无忌", "张良", "王二麻子", "谢广坤", "张三丰", "张翠山"); //获取姓张且名字为三个字的姓名 /** * Stream<T> filter(Predicate<? super T> predicate); * 方法返回值为Stream对象 */ stringStream.filter(item -> item.length() == 3).filter(item -> item.startsWith("张")).forEach(item -> System.out.println(item)); }
Stream 流中间操作方法
-
==注:== 中间方法返回都是Stream流对象, 即支持链式编程
-
Stream filter (Predicate<? super T> predicate) 用于对流中的数据进行过滤
-
Stream limit(long maxSize) 获取前几个元素
-
Stream skip(long n) 跳过前几个元素
-
Stream distinct() 去除流中重复的元素依赖 (hashCode 和 equals方法)
-
static Stream concat(Stream a, Stream b) 合并a和b两个流为一个流
Stream 流的注意事项
-
如果流对象被消费过(只能使用一次),就不能再使用了, 若需要只能再次创建
-
// 需求1:取前4个数据组成一个流 Stream<String> stream1 = list.stream().limit(4); //需求2:跳过2个数据组成一个流 Stream<String> stream2 = list.stream().skip(2); // 需求3:合并需求1和需求2得到的流,并把结果在控制台输出 Stream.concat(stream1,stream2).forEach(item-> System.out.println(item)); System.out.println("==========="); // 需求4:合并需求1和需求2得到的流,并把结果在控制台输出,要求字符串元素不能重复 Stream.concat(list.stream().limit(4),list.stream().skip(2)).distinct().forEach(item-> System.out.println(item));
Stream 收集操作
-
把 Stream 流操作后的结果数据转回到集合
-
Stream 流操作,不会修改数据源
-
R collect(Collector collector)开始收集Stream流,指定收集器
-
public static Collector toList() 把元素收集到List集合中
-
List<Integer> list1 = list.stream().filter(item -> item % 2 == 0).collect(Collectors.toList()); -
public static Collector toSet() 把元素收集到Set集合中
-
Set<Integer> set = list.stream().filter(item -> item % 2 == 0).collect(Collectors.toSet()); -
public static Collector toMap(Function keyMapper , Function valueMapper) 把元素收集到Map集合中
-
/** * 创建一个ArrayList集合,并添加以下字符串。字符串中前面是姓名,后面是年龄 * "zhangsan,23" * "lisi,24" * "wangwu,25" * 保留年龄大于等于24岁的人,并将结果收集到Map集合中,姓名为键,年龄为值 */ @Test public void test02() { ArrayList<String> list = new ArrayList<>(); list.add("zhangsan,23"); list.add("lisi,24"); list.add("wangwu,25"); Map<String, Integer> map = list.stream().filter(item -> Integer.parseInt(item.split(",")[1]) >= 24).collect(Collectors.toMap(new Function<String, String>() { @Override public String apply(String item) { return item.split(",")[0]; } }, new Function<String, Integer>() { @Override public Integer apply(String item) { return Integer.parseInt(item.split(",")[1]); } })); System.out.println(map); }
-
File类
- 概念 : File类代表操作系统的文件对象(文件、文件夹)
File 类创建对象
File 类常用方法
-
public boolean isDirectory() 判断此路径名表示的File是否为文件夹 public boolean isFile() 判断此路径名表示的File是否为文件 public boolean exists() 判断此路径名表示的File是否存在 public long length() 返回文件的大小(字节数量) public String getAbsolutePath() 返回文件的绝对路径 public String getPath() 返回定义文件时使用的路径 public String getName() 返回文件的名称,带后缀 public long lastModified() 返回文件的最后修改时间(时间毫秒值)
File 类的创建和删除方法
-
创建
-
public boolean createNewFile() 创建一个新的空的文件 public boolean mkdir() 只能创建一级文件夹 public boolean mkdirs() 可以创建多级文件夹
-
-
删除
-
public boolean delete() 删除由此抽象路径名表示的文件或空文件夹 -
==注:== delete() 方法只能删除空文件夹,且不走回收站
-
File 类的遍历方法
-
public File[] listFiles() 获取当前目录下所有的 “一级文件对象” 返回 File 数组 -
案例
-
/** * 需求:键盘录入一个文件夹路径,找出这个文件夹下所有的 .java 文件 */ @Test public void test01() { File dir = FileDemo01.getDir(); printFile(dir); } private void printFile(File dir) { File[] files = dir.listFiles(); for (File file : files) { if (file.isFile() && file.getName().endsWith(".exe")) { System.out.println(file); } else { if (file.listFiles() != null) { printFile(file); } } } }