java流stream的简单封装
stream的⼆次封装
在⼯作中,经常有这样的需求:将⼀个集合转换成map、将⼀个集合过滤筛选等操作等。这些通过java8的流编程很容易实现,但是写多了就会发现这样⼀长串写下来很不爽,于是我对它进⾏了简单封装,⽐如我想要的结果是将⼀个list转换成map,map的key是list对象中的主键,那么我可以构造⼀个⽅法,传⼊list和map中key与value的函数,返回想要的结果,感觉这样更加清晰,就类使⽤⿊盒,代码如下:
public class DecorativeStreamUtil {
/**
* list转map I V K 分别代表输⼊集合泛型的类型、map中key的类型、map中值的类型
* @param list : 输⼊的集合
* @param functionK : 键转换函数
* @param functionV : 值转换函数
* @return java.util.Map<K,V>
*/
public static <I,K,V> Map<K,V> list2map(List<I> list, Function<I,K> functionK, Function<I,V> functionV){
if (list == null || list.size()==0){
return Collections.EMPTY_MAP;
}
return list.stream().Map(functionK, functionV));
}
/**
*
* @param list : 输⼊的集合
* @param functionO : 集合转换函数
* @return java.util.List<O>
*/
public static <I,O> List<O> list2list(List<I> list, Function<I,O> functionO){
if (list == null || list.size()==0){
return Collections.EMPTY_LIST;
}
return list.stream().map(functionO).List());
}
/**
* list条件过滤
* @param list : 输⼊的集合
* @param predicateF : 过滤条件函数
* @return java.util.List<I>
*/
public static <I> List<I> listFilter(List<I> list, Predicate<I> predicateF){
if (list == null || list.size()==0){
return Collections.EMPTY_LIST;
}
return list.stream().filter(predicateF).List());
}
}
测试代码如下:
public class TestStreamDemo {
public static void main(String[] args) {
testlist2map();
}
public static void testlist2map(){
List<Student> students = new ArrayList<>();
students.add(new Student(1,"⼩李",22));
students.add(new Student(2,"⼩⽉",20));
students.add(new Student(3,"⼩⽩",24));
Map<Integer, String> list2map = DecorativeStreamUtil.list2map(students, Student::getId, Student::getName); System.out.(2));
}
}
class Student{
private Integer id;
private String name;
private Integer age;
public Student(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;java stream
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
上⾯只是⼀个例⼦,⼯作中可以根据不同的需求将这些流封装,之后使⽤的时候就很⽅便。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论