public <T> T getFieldValue(Object target, String fieldName, Class<T> typeName){try {Object fieldValue = FieldUtils.readField(target, fieldName, true);return (T)fieldValue;} catch (IllegalAccessException e) {log.error("出错:实体类{}没有{}类型的{}属性字段!",target.getClass(),typeName.getSimpleName(),fieldName);throw new RuntimeException(e);}}

用法1:

public Long getLongValue(Object target, String fieldName){return getFieldValue(target,fieldName,Long.class);}

以此类推,你也可以写出

    public LocalDateTime getLocalDateTimeValue(Object target, String fieldName){return getFieldValue(target,fieldName,LocalDateTime.class);}public String getStringValue(Object target, String fieldName){return getFieldValue(target,fieldName,String.class);}

笔者的一个用法是在泛型方法中提取实体的属性值,做进一步计算

    <R,T> 你的返回类型 processData(String label, String snapshotKey, Class<T> targetClass,Predicate<? super T> filter, final Function<? super T, ? extends R> mapper){if(filter == null){//如果没有指定过滤表达式,给一个默认值filter = (T entity)->{LocalDateTime createTime = cacheService.getFieldValue(entity, "createTime", LocalDateTime.class);return createTime.getMinute() % 10 == 0&&createTime.getSecond() ==0;};}Map<String,Object> resultMap = new HashMap<>();Optional<SnmpNode> node1 = nodeMapping.values().stream().findFirst();List<T> list = null;if(node1.isPresent()){String ipAddr1 = node1.get().getAddress();list = cacheService.getCachedList(snapshotKey, ipAddr1, targetClass);//服务器ipresultMap.put("legend", nodeMapping.values().stream().map(SnmpNode::getAddress).collect(Collectors.toList()));//批量格式时间MM-dd HH:mm:ss并封送到ListList<String> xAxis = list.stream().map(entity->cacheService.getFieldValue(entity,"createTime", LocalDateTime.class)).filter(localDateTime -> localDateTime.getMinute()%10==0 && localDateTime.getSecond() == 0).map(createTime -> createTime.format(DateTimeFormatter.ofPattern("MM-dd HH:mm"))).collect(Collectors.toList());//筛选后的样本大小int filteredSize = xAxis.size();//由于图表不能显示太多的数据,太多的就会被隐藏,因此只显示最近的20条数据xAxis = xAxis.stream().skip(filteredSize>=0?filteredSize-20:filteredSize).collect(Collectors.toList());resultMap.put("xAxis",xAxis);List<EChartSeries> series = new LinkedList<>();for(Map.Entry<Long,SnmpNode> entry: nodeMapping.entrySet()){SnmpNode node = entry.getValue();String ipAddr = node.getAddress();List<T> traffics = cacheService.getCachedList(snapshotKey, ipAddr, targetClass);List<R> data = traffics.stream().filter(filter).skip(filteredSize>=0?filteredSize-20:filteredSize).map(mapper).collect(Collectors.toList());EChartSeries chartSeries = new EChartSeries.Builder().withName(ipAddr).withStack(label).withType("line").withData((LinkedList<String>) new LinkedList<R>(data)).build();if(!CollectionUtils.isEmpty(data)) {series.add(chartSeries);}}resultMap.put("series",series);}return 你的返回类型;}

import lombok.Data;
import lombok.NoArgsConstructor;import java.util.LinkedList;/**** //    name:'邮件营销',* //    type:'line',* //    stack: '内存使用率',* //    data:[120, 132, 101, 134, 90, 230, 210]*/
@Data
@NoArgsConstructor
public class EChartSeries {private String name;private String type;private String stack;private LinkedList<String> data;private EChartSeries(Builder builder) {setName(builder.name);setType(builder.type);setStack(builder.stack);setData(builder.data);}public static final class Builder {private String name;private String type;private String stack;private LinkedList<String> data;public Builder() {}public Builder(EChartSeries copy) {this.name = copy.getName();this.type = copy.getType();this.stack = copy.getStack();this.data = copy.getData();}public Builder withName(String name) {this.name = name;return this;}public Builder withType(String type) {this.type = type;return this;}public Builder withStack(String stack) {this.stack = stack;return this;}public Builder withData(LinkedList<String> data) {this.data = data;return this;}public EChartSeries build() {return new EChartSeries(this);}}
}

转载于:https://www.cnblogs.com/passedbylove/p/11207933.html

用泛型方法Java从实体中提取属性值,以及在泛型方法中的使用相关推荐

  1. html中input中type属性值,HTML的input中type属性的属性值包括哪些

    HTML的input中type属性的属性值包括哪些 (2011-11-25 16:44:40) 标签: 杂谈 1.取消按钮按下时的虚线框,在input里添加属性值 hideFocus 或者 HideF ...

  2. Java:比较两个对象中全部属性值是否相等

    点击关注公众号,实用技术文章及时了解 来源:xiaoer.blog.csdn.net/article/details/85005295 例如下述Java类: import java.io.Serial ...

  3. JAVA 8 lambda 表达式实现按某个属性值查找对象集合中符合条件的对象

    转载自:https://www.cnblogs.com/lindsayYang/p/9843599.html JAVA 8 lambda 表达式实现按某个属性值查找对象集合中符合条件的对象 当前的需求 ...

  4. springboot log4j2.xml读取application.yml中的属性值

    注意:部份代码太长,可以通过文末的图片快速查看对应位置 项目需求 用户想自己配置日志存放的位置,因此我们需要满足提供可以配置的文件,用以满足用户的需求. 因此,我们主要通过 log4j2.xml 来读 ...

  5. SpringMVC js如何获取后台model中的属性值

    SpringMVC js如何获取后台model中的属性值 companylist 如何获取 var companylist="${companylist}"; 希望对你有所帮助 个 ...

  6. 通过属性值从对象数组中获取JavaScript对象[重复]

    本文翻译自:Get JavaScript object from array of objects by value of property [duplicate] This question alr ...

  7. 【Java】从键盘中输入一个值,在数组中查找该值的索引并输出

    问题: 从键盘中输入一个值,在数组中查找该值的索引并输出 代码: package learnjava;import java.util.Scanner;public class demo13 {pub ...

  8. s:property=a value=/取的s:debug/s:debug中的value stack中的属性值

    <s:property="a"  value=""/>取的<s:debug></s:debug>中的value stack中 ...

  9. 在jsp中调用常量类中的属性值

    在jsp中想要调用常量类中的属性值方法: 1.  在jsp中导入此常量类   <%@page import="com.Zyp.constant.FlagConstant"%& ...

最新文章

  1. Axis2;wsdl生成客户端和serverJava代码
  2. [转]ASP.NET刷新页面的六种方法
  3. java的日期格式使用
  4. 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
  5. 关于移远EC20 4G模块 拨打电话的状态通知
  6. 乐高ev3搭建图_你所不知道的乐高EV3发展史
  7. 为XCode 6 添加新建类模板
  8. 论文翻译 | TOOD:《TOOD: Task-aligned One-stage Object Detection》详细解读
  9. 相关性系数及其python实现
  10. 《Wasserstein GAN》继续 GAN
  11. 企业邮箱如何发送国外邮件?2021知名企业邮箱网站排名
  12. 智商和情商哪个更重要
  13. 2019年人工智能研发热点回眸
  14. 青云上NAS服务器挂的操作(他们的文档)
  15. gazebo进程崩溃处理
  16. Java泛型中的桥方法(Bridge Method)
  17. Android Audio(七)—— AudioFocus(duck)
  18. python数据结构与算法练习-Printer Queue
  19. calendar获取本周一的日期_Swift - 获取本周(或指定日期所在周)的第一天、最后一天日期...
  20. 这篇文章讲了一个新科技

热门文章

  1. 设计数据库字段或者java中使用boolean型时需谨慎
  2. 导航控制器自定义返回控件及手势失效问题
  3. 获取线程中抛出的异常信息
  4. snapd_snapd使管理Nextcloud变得轻而易举
  5. 1069 The Black Hole of Numbers
  6. Python time库的使用总结
  7. centos 7.2 yum mysql_20191209_Centos7.2使用yum安装mysql
  8. 小白阶段如何学习Web前端知识
  9. 腾讯全力支持鸿蒙,腾讯宣布大力发展车联网,或与华为鸿蒙强强联合!
  10. 学习新对象字面量语法