Stream类
1、什么是Stream流?
在Java 8中,得益于Lambda所带来的函数式编程,
引入了一个全新的Stream流概念 ,用于解决已有集合/数组类库有的弊端。
2、Stream流能解决什么问题?
可以解决已有集合类库或者数组API的弊端。
Stream认为集合和数组操作的API很不好用,所以采用了Stream流简化集合和数组的操作!!
Stream流式思想的核心:是先得到集合或者数组的Stream流(就是一根传送带),然后就用这个Stream流操作集合或者数组的元素。然后用Stream流简化替代集合操作的API.
集合获取Stream流用: stream();
数组:Arrays.stream(数组) / Stream.of(数组);
public static void main(String[] args) {
// 集合变成流
Collection<String> collection = new ArrayList<>();
collection.add("123");
Stream<String> ss = collection.stream();
// Map变成流
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("1", 1);
Stream<String> keys = hashMap.keySet().stream();
Stream<Integer> values = hashMap.values().stream();
Stream<Map.Entry<String, Integer>> keyAndValue = hashMap.entrySet().stream();
// 数组获取流
String[] arrs = new String[]{"1", "2", "3", "4"};
Stream<String> arrsStream = Arrays.stream(arrs);
}
3、Stream流的常用API
-- Stream<T> filter(Predicate<? super T> predicate)
forEach : 逐一处理
count:统计个数
-- long count();
filter : 过滤元素
limit : 取前几个元素
skip : 跳过前几个
map : 加工方法(把原来的元素加工以后,从新放上去)
concat : 合并流
-- public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)
4、收集Stream流(将Stream转化成集合或数组)
Stream的作用是:把集合转换成一根传送带,借用Stream流的强大功能进行的操作。
但是实际开发中数据最终的形式还是应该是集合,最终Stream流操作完毕以后还是要转换成集合。
这就是收集Stream流。
收集Stream流的含义:就是把Stream流的数据转回到集合中去。
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class _2022112Demo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
list.add("张三丰");
// 把stream流转换成Set集合。
Stream<String> list1 = list.stream().filter(s->s.startsWith("张"));
Set<String> sets = list1.collect(Collectors.toSet());
System.out.println(sets);
// 把stream流转换成List集合。
Stream<String> list2 = list.stream().filter(s->s.startsWith("张"));
List<String> list3 = list2.collect(Collectors.toList());
System.out.println(list3);
// 把stream流转换成数组。
Stream<String> list4 = list.stream().filter(s->s.startsWith("张"));
String[] str = list4.toArray(String[]::new);
System.out.println(Arrays.toString(str));
}
}
File类
File类:代表操作系统的文件对象。
File类:是用来操作操作系统的文件对象的,删除文件,获取文件信息,创建文件(文件夹)...广义来说操作系统认为文件包含(文件和文件夹)
File类的创建文件对象的API:
包:java.io.File
(1)构造器:
-- public File(String pathname):根据路径获取文件对象
-- public File(String parent , String child):根据父路径和文件名称获取文件对象!
File f = new File("绝对路径/相对路径");
相关API:
- public String getAbsolutePath() :返回此File的绝对路径名字符串。
- public String getPath() : 获取创建文件对象的时候用的路径
- public String getName() : 返回由此File表示的文件或目录的名称。
- public long length() : 返回由此File表示的文件的长度。
- public boolean exists() :此File表示的文件或目录是否实际存在。
- public boolean isDirectory():此File表示的是否为目录。
- public boolean isFile() :此File表示的是否为文件
- public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。 (几乎不用的,因为以后文件都是自动创建的!)
- public boolean delete() :删除由此File表示的文件或目录。 (只能删除空目录)
- public boolean mkdir() :创建由此File表示的目录。(只能创建一级目录)
- public boolean mkdirs() :可以创建多级目录(建议使用的)
- public String[] list():获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
- public File[] listFiles()(常用):获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)