Java List操作3(获取list中bean对象中的某一列值—map)

select操作,获取list中bean对象中的某一列值
业务场景:通常我们获取list中bean对象中的某个属性值,需要写一个for 循环,代码会比较冗余。话不多说,直接上代码

1、自定义方法

    public interface Select<T> {
        T select(Object obj) ;
    }

     /*
     *选择对象集合的属性值 
     *<T extends Comparable<T> ,D>
     */
    public static final <T,D> Set<T> select(Collection<D> colls ,String fieldName){
        return select(colls,new Select<T>(){
            @Override
            public T select(Object obj){
                Object v=getFieldValueByName(obj,fieldName);
                return (T)v;
            }
        });
    }
    /**
     * 通过接口函数选择对象集合的属性值 
     * @param colls
     * @param gb
     * @return 这里使用set作为返回值是为了去重,当然也可以使用List
     * <T extends Comparable<T> ,D>
     */
    public static final <T,D> Set<T> select(Collection<D> colls,Select<T> gb){
        Iterator<D> iter = colls.iterator() ;
        Set<T> set=new HashSet<T>();
        while(iter.hasNext()) {
            D d = iter.next() ;
            T t = gb.select(d) ;
            if(t!=null){
                set.add(t);
            }
        }
        return set;
    }

2、Java stream流

  • 获取某一列的值,并且装换为String,先撸代码

    public static void main(String[] args)
      {
          List<User> list = new ArrayList();
          User user1 = new User();
          user1.setId(1L); user1.setMobile("123456");
          list.add(user1);
          User user2 = new User();
          user2.setId(2L); user1.setMobile("12345678");
          list.add(user2);
    
          //获取某一列的值
          List<String> ids = list.stream().map(f -> f.getId()).collect(Collectors.toList());
          System.out.println(ids);
      }
    
  • 原理

image.png

对于stream流中包含的元素,使用给定的转换函数(f -> String.valueOf(f.getId())),进行转换操作,新生成的stream流只包含转换生成的元素。
map方法还有三个对于原始类型的变种方法,分别是:mapToInt,mapToLong和mapToDouble。这三个方法也比较好理解,比如mapToInt就是把原始Stream转换成一个新的Stream,这个新生成的Stream中的元素都是int类型。之所以会有这样三个变种方法,可以免除自动装箱/拆箱的额外消耗;

3、获取list中bean对象中的某一列值,并且转换类型

public static void main(String[] args)
  {
      List<User> list = new ArrayList();
      User user1 = new User();
      user1.setId(1L); user1.setMobile("123456");
      list.add(user1);
      User user2 = new User();
      user2.setId(2L); user1.setMobile("12345678");
      list.add(user2);

      //获取某一列的值,并且装换为String
      List<String> ids = list.stream().map(f -> String.valueOf(f.getId())).collect(Collectors.toList());
      System.out.println(ids);
  }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一切已是醉美模样。 杏花粉,玉兰白,连翘黄…… 昨儿还心心念念春未到,今儿已悄然花浓枝头香。 怡园小园,不浓,不烈...
    想逢一笑阅读 526评论 3 11
  • 本片段来自林文采博士的《心理营养-林文采博士的亲子教育课》。 R 阅读原文片段 第三个心理营养:安全感 P6 ...
    胡海默阅读 618评论 0 0
  • 版权归作者所有,任何形式转载请联系作者。 作者:hi大大(来自豆瓣) 来源:https://www.douban....
    很不乖阅读 451评论 0 0