java mybatis 如何自己实现一下 Lambda。 如何把 Entity::getId 作为参数?

问题

需求

  • 我有一个实体 充血模型 Entity
  • 想要实现 fieldList ( 根据字段名获取list上的数据 )
class Entity {

List list

// 根据字段名获取list上的数据

public List fieldList () {}

}

演示

Entity entity = new Entity();

List list = [{id:11, name:12}, {id:21, name: 22} , { id: 31, name:32}]

entity.setList(list);

// 第一种

entity.fieldList("id") // [11,21,31]

// 第二种 如何实现

entity.fieldList(Entity::getId) // [11,21,31]

现状

  • Entity.java

  • 实际使用 报错


回答:

你这个我在mybatisplus中见过,你可以看一下mybatisplus中的com.baomidou.mybatisplus.core.toolkit.LambdaUtils#extract

正常getId的lambda方法应该是java.util.function.Function的字类,
现在要改成com.baomidou.mybatisplus.core.toolkit.support.SFunction,这个实现了Serializable,这样会有隐藏的writeReplace方法,writeReplace里能拿到这个lambda对应方法的名称

这样你就能根据lambda方法获取字段名称。


回答:

import java.util.List;

import java.util.function.Function;

import java.util.stream.Collectors;

public class Entity {

private List<Data> list;

// getters and setters

public <T> List<T> fieldList(Function<Data, T> function) {

return list.stream().map(function).collect(Collectors.toList());

}

}

然后用这个方法:

Entity entity = new Entity();

List<Data> list = Arrays.asList(new Data(11, "12"), new Data(21, "22"), new Data(31, "32"));

entity.setList(list);

List<Integer> ids = entity.fieldList(Data::getId); // [11, 21, 31]

以上是 java mybatis 如何自己实现一下 Lambda。 如何把 Entity::getId 作为参数? 的全部内容, 来源链接: utcz.com/p/945272.html

回到顶部