Java Stream API

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);
    }
}));
  • 分组