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