Java Stream流API
Java Stream流API
package com.zuke.zukeliving.commodity;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class LearnStreamAPI {
public static void main(String[] args) {
// 创建Person实例
Person person1 = new Person(1, "a", 22);
Person person2 = new Person(2, "b", 34);
Person person3 = new Person(3, "c", 10);
Person person4 = new Person(4, "d", 110);
Person person5 = new Person(5, "e", 9);
// 放入到list集合
List<Person> list = Arrays.asList(person1, person2, person3, person4, person5);
//System.out.println(list);
//分割线条,测试上面代码时请注释下面这段代码
// 需求:从list中过滤出person.id % 2 != 0 的对象
// 1. 把list转成流对象,目的是为了使用流的各个方法
// 2. filter() 传入的是Predicate,返回boolean值
// 3. collect() 传入Collector,将数据收集到集合
// 4. map操作:希望给过滤得到的person对象加入cat对象,原list中的数据也会改变
// 5. sorted() 传入Comparator(object1, object2)
List<Person> list2 = list.stream().filter(person -> {
return person.getId() % 2 != 0;
}).map(person -> {
Cat cat = new Cat(person.getId() + 100, "小花猫", "橘色");
person.setCat(cat);
return person;
}).sorted((p1, p2) -> {
return p1.getId() - p2.getId(); // 按照id升序排列
//return p2.getId() - p1.getId(); // 按照id降序排列
//return p2.getAge() - p1.getAge(); // 按照年龄从大到小排列
}).collect(Collectors.toList());
System.out.println("list2==>" + list2);
System.out.println("list==>" + list);
//分割线条,测试上面代码时请注释上面这段代码
// 其他常用的stream API
// limit使用
// 需求:要显示list集合的前两个数据
list.stream().limit(2).forEach(person -> {
System.out.println(person);
});
// count使用
long count = list.stream().count();
System.out.println(count);
// 先过滤再counter
long count1 = list.stream().filter(person -> {
return person.getAge() > 10;
}).count();
System.out.println(count1);
}
}
// Person类
class Person {
private Integer id;
private String name;
private Integer age;
private Cat cat;
public Person(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", cat=" + cat +
'}';
}
}
// Cat类
class Cat {
private Integer id;
private String name;
private String color;
public Cat(Integer id, String name, String color) {
this.id = id;
this.name = name;
this.color = color;
}
@Override
public String toString() {
return "Cat{" +
"id=" + id +
", name='" + name + '\'' +
", color='" + color + '\'' +
'}';
}
}
package com.zuke.zukeliving.commodity.learnTest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
//流式计算:将集合转成map
public class T2 {
public static void main(String[] args) {
//先构建一个集合
ArrayList<stu> stus = new ArrayList<>();
stus.add(new stu(100, "zk1", "中国1", "game1"));
stus.add(new stu(200, "zk2", "中国2", "game2"));
stus.add(new stu(300, "zk3", "中国3", "game3"));
stus.add(new stu(400, "zk4", "中国4", "game4"));
//需求
//将stu -> map k-string v-List<stu2>
//stu(100,"zk1","中国1","game1") -> 100 -> 两个stu2【("zk1","game1"),("zk1-克隆","game1")】
Map<String, List<stu2>> maps = stus.stream().collect(Collectors.toMap(k -> {
return k.getId().toString();
}, v -> {
ArrayList<stu2> list = new ArrayList<>();
list.add(new stu2(v.getName(), v.getHobby()));
list.add(new stu2(v.getName() + "-克隆", v.getHobby()));
return list;
}));
System.out.println(maps);
}
}
class stu {
private Integer id;
private String name;
private String address;
private String hobby;
@Override
public String toString() {
return "stu{" +
"id=" + id +
", name='" + name + '\'' +
", address='" + address + '\'' +
", hobby='" + hobby + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public stu(Integer id, String name, String address, String hobby) {
this.id = id;
this.name = name;
this.address = address;
this.hobby = hobby;
}
public stu() {
}
}
class stu2 {
private String name;
private String hobby;
@Override
public String toString() {
return "stu2{" +
"name='" + name + '\'' +
", hobby='" + hobby + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public stu2(String name, String hobby) {
this.name = name;
this.hobby = hobby;
}
public stu2() {
}
}
版权申明
本文系作者 @卸了磨的驴 原创发布在Java Stream流API。未经许可,禁止转载。
全部评论