Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)
API操作
1. filter 筛选,按照一定的规则校验流中的元素,将符合条件的元素提取到新的流中
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("meta_data1111");
list.add("meta_data222");
list.add("meta_data333");
list.add("meta_data444");
list.add("meta_data555");
list.add("666meta_data");
list.add("instance_data111");
list.add("instance_data222");
list.add("instance_data333");
list.add("instance_data444");
list.add("5555instance_data");
// 用filter可以对list进行过滤
List<String> meta_data = list.stream()
.filter(o -> o.contains("meta_data")).collect(Collectors.toList());
System.out.println(meta_data);
List<String> instance_data = list.stream()
.filter(o -> o.contains("instance_data")).collect(Collectors.toList());
System.out.println(instance_data);
}
[meta_data1111, meta_data222, meta_data333, meta_data444, meta_data555, 666meta_data]
[instance_data111, instance_data222, instance_data333, instance_data444, 5555instance_data]
2. sorted 排序,默认是按照字符串升序进行排序。
List<String> meta_data = list.stream()
.filter(o -> o.contains("meta_data"))
.sorted()
.collect(Collectors.toList());
List<String> instance_data = list.stream()
.filter(o -> o.contains("instance_data"))
.sorted()
.collect(Collectors.toList());
3、映射map 就是将集合中的A元素转换成想要的B元素
Map<String, String> map = new HashMap<>();
map.put("123", null);
map.put("1231", null);
map.put("1232", null);
map.put("1233", null);
List<String> collect = new ArrayList<>(map.keySet());
List<String> collect1 = collect.stream().map(o -> "'" + o + "'")
.collect(Collectors.toList());
System.out.println(collect); // [123, 1233, 1232, 1231]
System.out.println(collect1); // ['123', '1233', '1232', '1231']
public class Test {
public static void main(String[] args) {
List<DogTest> list = new ArrayList<>();
list.add(new DogTest("zhangsan",11));
list.add(new DogTest("lisi",11));
list.add(new DogTest("wangwu",12));
list.add(new DogTest(null,12));
System.out.println(list);
List<DogTest> collect = list.stream().map(Test::reName).collect(Collectors.toList());
System.out.println(collect);
}
private static DogTest reName(DogTest dog) {
if (dog.getName() == null || dog.getName().equals("zhangsan")) {
dog.setName("zhangsan_111");
}
if (dog.getName().equals("lisi")) {
dog.setName("lisi_111");
}
return dog;
}
}
class DogTest {
public DogTest(String name) {
this.name = name;
}
public DogTest(String name, int age) {
this.name = name;
this.age = age;
}
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "DogTest{" + "name='" + name + '\'' + ", age=" + age + '}';
}
}
----------------
[DogTest{name='zhangsan', age=11}, DogTest{name='lisi', age=11}, DogTest{name='wangwu', age=12}, DogTest{name='null', age=12}]
[DogTest{name='zhangsan_111', age=11}, DogTest{name='lisi_111', age=11}, DogTest{name='wangwu', age=12}, DogTest{name='zhangsan_111', age=12}]
后续有用到在补充
参考
【Java 8系列】Stream详解,看这一篇就够啦_善良勤劳勇敢而又聪明的老杨的博客-CSDN博客_java stream