Java Stream API

获取 stream 流

public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"小寒","小李","小红" );
Stream<String> stream = list.stream();
stream.forEach(s -> System.out.println(s));
Map<Integer,String> map = new HashMap<>();
map.put(1,"java");
map.put(2,"c++");
map.put(3,"python");
map.keySet().stream().forEach(i-> System.out.println(i));
map.entrySet().stream().forEach(s-> System.out.println(s));
int[] arr = {1,2,3,4,5,6};
Arrays.stream(arr).forEach(s-> System.out.println(s));
Stream.of(1,2,3,4,5,"k").forEach(s-> System.out.println(s));
}
Stream.of() 参数可以是一堆零散数据, 也可以是引用数据数组
中间方法

filter 匿名内部类中 test() 函数返回 true留下,否则去掉
list.stream()
.filter(s -> {return s.contains("红");})
.forEach(s -> System.out.println(s));
Stream.concat(list.stream(),list.stream()).forEach(s-> System.out.println(s));
// 将 String 类型转为 Integer
.map(new Function<String, Integer>() {
@Override
public Integer apply(String s) {
return Objects.hash(s);
}
})
终结方法

toArray() 需要的参数是个函数: 返回指定类型的数组
String[] array = list.stream().toArray(new IntFunction<String[]>() {
@Override
public String[] apply(int value) {
// value 是流上的元素个数
return new String[value];
}
});
list.stream().collect(Collectors.toList());
list.stream().collect(Collectors.toSet()); //自带去重
// collect 接受两个函数接口 1:将流中的数据转为key, 2:将流中的数据转为value
Map<String, Integer> collect = list.stream().collect(Collectors.toMap(new Function<String, String>() {
@Override
public String apply(String s) {
return s;
}
}, new Function<String, Integer>() {
@Override
public Integer apply(String s) {
return Objects.hash(s);
}
}));
- 分组
