精华内容
下载资源
问答
  • User 转SchoolResponse List<User> usrLst = userMapper.selectList(); List<SchoolResponse> schoolLst = usrLst.stream().map(tmp->... SchoolResponse school = new SchoolResponse();...

    User 转 SchoolResponse

    List<User> usrLst = userMapper.selectList();
    
    List<SchoolResponse> schoolLst = usrLst.stream().map(tmp->{
                SchoolResponse school = new SchoolResponse();
                school.setSchool(tmp.getSchool());
                school.setGradeClass(tmp.getGradeClass());
                return school;
            }).collect(Collectors.toList());

     

    展开全文
  • 碰到很多时候在做列表查询时,需要将DAO层传过来的对象进行处理和转换。那么如果我们碰到需要在换换对象的时候,可以考虑封装Converter来简化业务代码,其中我们可以用BeauUtils和lambda表达式快速完成,特别是...

    释放双眼,带上耳机,听听看~!

    a8dd751c434885fa7cf3f94173c70c77.png

    练手JAVA中,写个笔记。碰到很多时候在做列表查询时,需要将DAO层传过来的对象进行处理和转换。那么如果我们碰到需要在换换对象的时候,可以考虑封装Converter来简化业务代码,其中我们可以用BeauUtils和lambda表达式快速完成,特别是lambda,功能强大。

    场景描述

    @Override

    public Page findList(String buyerOpenid, Pageable pageable) {

    Page orderMasterPage = orderMasterRepository.findByBuyerOpenid(buyerOpenid, pageable);

    orderMasterPage.getContent();

    Page orderDTOPage = new PageImpl(这里是需要传的参数);//报红了,需要传参

    return orderDTOPage;

    }

    首先咱们接收了orderMasterRepository的Page对象,一顿操作,然后我们在实例化PageImpl时,报了类型错误。

    那么我们瞅瞅PageImpl源码,看看需要什么参数。

    public PageImpl(List content, Pageable pageable, long total) {

    super(content, pageable);

    this.total = (Long)pageable.toOptional().filter((it) -> {

    return !content.isEmpty();

    }).filter((it) -> {

    return it.getOffset() + (long)it.getPageSize() > total;

    }).map((it) -> {

    return it.getOffset() + (long)content.size();

    }).orElse(total);

    }

    OK,需要List、Pageable、total。所以开始写个Convert封装,直接贴个示例代码吧。

    新建package:converter,新建OrderMaster2OrderDTOConverter。

    public class OrderMaster2OrderDTOConverter {

    public static OrderDTO convert(OrderMaster orderMaster) {

    OrderDTO orderDTO = new OrderDTO();

    BeanUtils.copyProperties(orderMaster, orderDTO);

    return orderDTO;

    }

    public static List convert(List orderMasterList) {

    return orderMasterList.stream().map(e ->

    convert(e)

    )

    .collect(Collectors.toList());

    }

    }

    展开全文
  • 这里使用的是Kotlin语言来讲解Lambda,和Java中的Lambda是一样的,之前看Java Lambda的书也有讲到这个点,原理是一样的,这里记录一下。 在做Android开发的时候,假设有三个TextView(显示文本的控件),需要设置同...

    这里使用的是Kotlin语言来讲解Lambda,和Java中的Lambda是一样的,之前看Java Lambda的书也有讲到这个点,原理是一样的,这里记录一下。

    在做Android开发的时候,假设有三个TextView(显示文本的控件),需要设置同一个点击事件,Kotlin实现代码如下:

    val onClickListener = { _: View -> 。。。 }
    tv_1.setOnClickListener(onClickListener)
    tv_2.setOnClickListener(onClickListener)
    tv_3.setOnClickListener(onClickListener)
    

    查看Kotlin翻译成的Java代码,如下:

    Function1 onClickListener = (Function1)(new Function1() {
       public Object invoke(Object var1) {
          。。。
       }
    
       public final void invoke(@NotNull View $noName_0) {
          。。。
       }
    });
    tv_1.setOnClickListener((OnClickListener)(new HelpAndFeedbackActivity$sam$android_view_View_OnClickListener$0(onClickListener)));
    tv_2.setOnClickListener((OnClickListener)(new HelpAndFeedbackActivity$sam$android_view_View_OnClickListener$0(onClickListener)));
    tv_3.setOnClickListener((OnClickListener)(new HelpAndFeedbackActivity$sam$android_view_View_OnClickListener$0(onClickListener)));
    

    这里我对Java代码进行了一些删减,只关注我们需要的代码,可以看到setOnClickListener的调用,每次都是new的新对象,我们希望传递的是同一个对象,如何实现呢,如下:

    val onClickListener = View.OnClickListener{ 。。。 }
    tv_1.setOnClickListener(onClickListener)
    tv_2.setOnClickListener(onClickListener)
    tv_3.setOnClickListener(onClickListener)
    

    查看Kotlin翻译成的Java代码,如下:

    OnClickListener onClickListener = (OnClickListener)(new OnClickListener() {
       public final void onClick(View it) {
          。。。
       }
    });
    ((TextView)this._$_findCachedViewById(id.tv_1)).setOnClickListener(onClickListener);
    ((TextView)this._$_findCachedViewById(id.tv_2)).setOnClickListener(onClickListener);
    ((TextView)this._$_findCachedViewById(id.tv_3)).setOnClickListener(onClickListener);
    

    可以看到,三个setOnClickListener的调用传的是同一个对象。

    总结

    val onClickListener = { _: View -> 。。。 }
    val onClickListener = View.OnClickListener { 。。。 }
    

    上面第一行代码,声明的onClickListener变量就是一个Lambda,我们在变量上按Ctrl + Q查看变量的类型如下:
    在这里插入图片描述
    再查看第二行代码的变量类型,如下:
    在这里插入图片描述
    可以看到,第1个变量类型是Lambda,而第2个变量类型是OnClickListener。

    对于View.OnClickListener { },{ }是Lambda,但是View.OnClickListener这个就声明了要把{ }这个转换为OnClickListener对象。

    所以,我们在平时使用的时候需要注意,如果要把Lambda转换为对象,且使用多次,则不要使用第一种方式,因为它在每次转换为对象时都是一个新的对象,特别是需要解除注册的事件,示例如下:

    val lambda = ...
    foo.addListener(lambda)
    foo.removeListener(lambda)
    

    这种情况会出问题,因为同一个lambda对象调用了两次,转换为了两个对象(假设是对象A和对象B),添加和移除的对象不是同一个,所以移除失败,导致内存泄露。

    展开全文
  • Lambda表达式转换List整理

    千次阅读 2019-09-17 10:31:14
    1、获取对象objectList中某一个字段list List<String> skuCodeList = objectList.stream().map(Object::getSkuCode).collect(Collectors.toList()); 2、获取对象objectList中某一个字段值求和 Integer ...

    Lambda 通用list转map

    Lambda表达式对List常见转换整理
    基于如下对象进行操作

    @Data  //lombok 注解,替代get、set方法
    public class MyObject{
       private Long id;
       	private String skuCode;//sku编码
       	private Integer skuNum;//sku数量
       	private Integer warehouseId;//仓库ID
        public String getKey(){
            return warehouseId+"_"+skuCode;
        }
    }
    

    //目标list

    List<MyObject> myObjectList = new ArrayList<>();
    

    1、获取对象myObjectList中某一个字段组装list

    List<String> skuCodeList = myObjectList.stream().map(MyObject::getSkuCode).collect(Collectors.toList());
    

    2、求和对象myObjectList中某一个字段

    Integer sumNum = myObjectList.stream().mapToInt(ScsProductDxReport::getSkuNum).sum();
    

    3、获取对象myObjectList中某一个字段作为key,对象作为value的map

     Map<String,Object> targetMap= new HashMap<>();
    	targetMap.putAll(myObjectList.stream().collect(Collectors.toMap(MyObject::getSkuCode, Function.identity())));
    

    4、获取对象myObjectList中某一个字段作为key,另一个字段作为value的map

    Map<String,Long> targetMap= new HashMap<>();
    targetMap.putAll(myObjectList.stream().collect(Collectors.toMap(MyObject::getSkuCode, Object::getNum)));
    

    5、获取对象myObjectList中某几个字段作为key,或某几个字段作为value的map中的key,在对应MyObject中增加拼接的get方法替换某个字段的get方法即可,按需定义:

    Map<String,Long> targetMap= new HashMap<>();
    targetMap.putAll(myObjectList.stream().collect(Collectors.toMap(MyObject::getKey, Object::getNum)));
    Map<String,String> targetMap= new HashMap<>();
    targetMap.putAll(myObjectList.stream().collect(Collectors.toMap(MyObject::getSkuCode, Object::getKey)));
    

    6、获取以某个字段做为key,对应对象list作为value的分组map

    Map<Boolean, List<MyObject>> targetMap= myObjectList.stream().collect(Collectors.groupingBy(MyObject::geWarehouseId));
    

    PS:filter数据过滤
    我们想要list里面某些特定的数据,
    如skuCode不为空的数据,则在stream()之后加上filter过滤即可
    例:

     List<String> skuCodeList = myObjectList.stream().filter(item -> !StringUtils.isEmpty(item.getSkuCode())).map(MyObject::getSkuCode).collect(Collectors.toList());
    

    其中**filter(item -> !StringUtils.isEmpty(item.getSkuCode()))**为具体的过滤条件,类似if()判断

    若我们想剥离出某个字段去重后的list,可以使用distinct()
    例 1中想要获取去重后的skuCode:

    List<String> skuCodeList = myObjectList.stream().map(MyObject::getSkuCode).distinct().collect(Collectors.toList());
    
    
    展开全文
  • 可以被用作创建委托对象或表达式树类型。所有的Lambda式都使用操作符“=>“,表示“goes to (转变为)”。操作符左边部分是输入参数表,右边部分是表达式或语句块。x => x * x 读成“x转变为x 乘x”...
  • list转mapjava8 lambda将List转换为Map比较简单,但是 有坑:List sellOutList = Lists.newArrayList();Boy one = new Boy();one.setId(34343);sellOutList.add(one);Boy two = new Boy();two.setId(34343);...
  • 在Java 8中,我们可以使用带有lambda表达式的Stream对象的map()方法将对象转换为另一种类型。 map()方法是流对象中的中间操作,因此我们需要一种终端方法来完成流。语法Streammap(FunctionsuperT,?extendsR>...
  • 在项目中,采用code first时建立的模型对象不能直接用于数据传输,需要从新根据需求建立Dto对象 为什么需要建立Dto对象呢? DTO即数据传输对象。之前不明白有些框架中为什么要专门定义DTO来绑定表现层中的数据,...
  • 了解在Python中如何使用 lambda, map, filter 和 reduce 函数来转换数据结构Photo by Markus Spiske on Unsplash面向对象的编程通过封装移动部件来让代码变得易于理解,而函数式编程则通过尽量减少移动部件来使代码变...
  • lambda是函数对象:编写一个lambda后,编译器会将该表达式转换成一个未命名类的未命名对象,类中含有一个重载的函数调用运算符。 eg. stable_sort(words.begin(),words.end(),[](const string &a,const string &...
  • 它由列表对象中的地图组成....我怎样才能转换lambda?List> combineList = new ArrayList<>(); // Temp Listfor(Map titleMap : titleList) { // Name Listfor(Map codeMap : codeList) { // Age Lis...
  • 在Java应用中进行集合对象间的转换是非常常见的事情,有时候在处理某些任务时选择一种好的数据结构往往会起到事半功倍的作用,因此熟悉每种数据结构并知道其特点对于程序员来说是非常重要的,而只知道这些是不够的,...
  • lambda表达式将List对象某个字段转换以逗号分隔的String类型 StringBuffer sb = new StringBuffer(); //获取节点id list.forEach(ztree -> { if (!(infoParentId.equals((ztree.getpId())))) { sb.append...
  • public dynamic GetDepartments(string labID) { List<int> usedIDs = new List(); //缓存已用过的ID ... 代码是将集合对象转换成树形结构 转载于:https://www.cnblogs.com/yesicoo/p/10947161.html
  • How to convert the CriteriaOperator to a lambda expression, so, the latter expression can be used in the IQueryable source using System; using System.Collections.Generic; using System.ComponentMo...
  • 需求描述 ...现在有这样一个需求,有一个用户对象集合,需要从里面获取用户Id转换成一个新的集合。 @Data public class User { /** * 用户Id */ private Integer id; /** * 姓名 */ ...
  • 对象lambda表达式

    2020-05-11 11:43:05
    /// 根据T转换lambda表达式 /// </summary> /// <typeparam name="TRequest"></typeparam> /// <typeparam name="T"></typeparam> /// <param name="request"></param&...
  • Lambda表达式 List转换为Map 各种格式

    万次阅读 2018-12-06 18:17:22
    利用java8新特性,可以用简洁高效的...定义1个Apple对象: public class Apple {  private Integer id;  private String name;  private BigDecimal money;  private Integer num;  public Apple(Integer id,...
  • java8 lambda 将list对象改为Map对象

    千次阅读 2019-03-06 15:27:15
    java8 lambda将List转换为Map比较简单,但是 有坑: List&lt;Boy&gt; sellOutList = Lists.newArrayList(); Boy one = new Boy(); one.setId(34343); sellOutList.add(one); Boy two =...
  • 1.List<...中有两个字段值的转换)注(第一个取值为key,第二个为value) Map map = list.stream().collect(Collectors.toMap(s->s.get("route_code"), s -> s.get("COUNT"))); 2.通过对象...
  • 在日常的C#/.NET开发中,我们可能会遇到这样的...)转换成二维数组对象的静态扩展方法(Lambda参数支持对象的任意属性)。如我有如下实体: /// <summary> /// 分类目录实体--测试类 /// </summary> ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 599
精华内容 239
关键字:

lambda对象转换