java 怎样 改变 数组元素的值
简介 (Introduction):
背景 需要解析Object数组中的数据,将数据(mintime)进行修改,改为(maxtime),修改后,生成新的对象
结构图
核心 对于Object数组的概念理解,对于数组的解析理解,数组赋值的理解 详见:https://www.cnblogs.com/liuyangfirst/p/12364850.html
快速上手(Getting Started)
测试数据
1、创建测试对象
class FunctionType { private String functionType; private Object[] objects; private boolean isDistinct; public String getFunctionType() {
return functionType;
} public void setFunctionType(String functionType) {
this.functionType = functionType;
} public Object[] getObjects() {
return objects;
} public void setObjects(Object[] objects) {
this.objects = objects;
} public boolean isDistinct() {
return isDistinct;
} public void setDistinct(boolean distinct) {
isDistinct = distinct;
} @Override
protected Object clone() { FunctionType functionTypeDemo = new FunctionType(); if (objects != null) {
functionTypeDemo.setObjects(objects.clone());
} functionTypeDemo.setFunctionType(functionType); functionTypeDemo.setDistinct(isDistinct); return functionTypeDemo;
}
}
2、创建测试数据
FunctionType functionType = new FunctionType(); functionType.setDistinct(false);
functionType.setFunctionType("max");
Object[] objects2 = new Object[1];
objects2[0] = "mintime";
functionType.setObjects(objects2); FunctionType functionType2 = new FunctionType(); functionType2.setFunctionType("from_unixtime");
functionType2.setDistinct(false);
Object[] objects3 = new Object[2];
objects3[0] = functionType;
objects3[1] = "yyyy-MM-dd HH24:mi:ss"; functionType2.setObjects(objects3);
3、创建修改方法
private static void changeObjectParam(FunctionType functionType2, String string) {
Object[] objects = functionType2.getObjects(); // 替换
Object[] replace = new Object[1];
replace[0] = new String(string); for (int i = 0; i < objects.length; i++) {
if (objects[0] instanceof FunctionType) {
FunctionType o = (FunctionType) objects[0];
if("max".equalsIgnoreCase(o.getFunctionType())){
if("mintime".equalsIgnoreCase(o.getObjects()[0].toString())){
o.setObjects(replace);
}
} break;
}
} System.out.println(new Gson().toJson(functionType2));
}
4、测试
public static void main(String[] args) { FunctionType functionType = new FunctionType(); functionType.setDistinct(false);
functionType.setFunctionType("max");
Object[] objects2 = new Object[1];
objects2[0] = "mintime";
functionType.setObjects(objects2); FunctionType functionType2 = new FunctionType(); functionType2.setFunctionType("from_unixtime");
functionType2.setDistinct(false);
Object[] objects3 = new Object[2];
objects3[0] = functionType;
objects3[1] = "yyyy-MM-dd HH24:mi:ss"; functionType2.setObjects(objects3); String string ="replace"; // 修改mintime为maxtime
// 修改mintime为maxtime
changeObjectParam(functionType2, string); }
环境 JDK1.8
- 配置 IDEA编辑
存在问题 暂无
进阶篇 (Advanced):
拓展object[]数据操作方法
1、根据传入的key,获取object中存的值
(1)方法/**
* 获取object中存的值
*
* @param obj 传入的Object
* @param key 传入的字段名称
* @return 获取object中存的值
*/
public static String getValueByKey(Object obj, String key) { // 得到类对象
Class<?> objClass = obj.getClass();
// 得到类中的所有属性集合
Field[] fs = objClass.getDeclaredFields(); for (Field f : fs) { // 设置些属性是可以访问的
f.setAccessible(true); try { if (f.getName().endsWith(key)) {
return f.get(obj).toString();
} } catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
} return "";
}(2)测试
public static void main(String[] args) { Object[] objects = new Object[5];
UserVO userVO = new UserVO("zhansan", "888");
objects[0] = userVO;
objects[1] = new Date();
// name 是UserVO对象的字段属性名
String name = getValueByKey(objects[0], "name");
System.out.println("value: " + name);
}2、根据传入的值,获取object中存的key
(1)方法
/**
* 获取object中存的关键字
*
* @param obj 传入的Object
* @return 获取object中存的关键字
*/
public static String getKey(Object obj) { // 得到类对象
Class<?> objClass = obj.getClass();
// 得到类中的所有属性集合
Field[] fs = objClass.getDeclaredFields(); for (Field f : fs) { // 设置些属性是可以访问的
f.setAccessible(true); try { return f.getName(); } catch (IllegalArgumentException e) {
e.printStackTrace();
}
} return "";
}(2)测试
public static void main(String[] args) { Object[] objects = new Object[5];
UserVO userVO = new UserVO("zhansan", "888");
objects[0] = userVO;
objects[1] = new Date(); String key = getKey(objects[0]);
System.out.println("key: " + key);
}3、根据传入的key,修改object[]中的对象的值
(1)方法
/**
* 修改object中参数的值
*
* @param obj 传入的Object
* @param key 传入的字段名称
* @param newValue 改变的值
*/
public static void changeObjectValueByKey(Object obj, String key, String newValue) { // 得到类对象
Class<?> objClass = obj.getClass();
// 得到类中的所有属性集合
Field[] fs = objClass.getDeclaredFields(); for (Field f : fs) { // 设置些属性是可以访问的
f.setAccessible(true);
try { if (f.getName().endsWith(key)) {
if (newValue.equalsIgnoreCase(f.get(obj).toString())) {
f.set(obj, key);
}
} } catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
}(2)测试
public static void main(String[] args) { Object[] objects = new Object[5];
UserVO userVO = new UserVO("zhansan", "888");
objects[0] = userVO;
objects[1] = new Date(); changeObjectValueByKey(objects[0], "name", "lisi");
System.out.println("user: " + new Gson().toJson(objects));
}4、根据传入的索引,修改object[]中的对象的值
(1)方法
public static void changeObjectValue(Object[] obj, int index, String newValue) { for (int i = 0; i < obj.length; i++) { if (i == index) { if (obj[i] instanceof Object[]) {
Object[] objects = (Object[]) obj[i];
objects[0] = newValue;
}
}
}
}(2)测试
public static void main(String[] args) { Object[] objects = new Object[5];
UserVO userVO = new UserVO("zhansan", "888");
objects[0] = userVO;
objects[1] = new Date(); changeObjectValue(objects, 0, "lisi");
System.out.println("user: " + new Gson().toJson(objects));
}5、修改object中的值
(1)方法
public static String getChildValueFromList(Object[] obj, int index) { for (int i = 0; i < obj.length; i++) { if (i == index) { if (obj[i] instanceof Object[]) {
Object[] objects = (Object[]) obj[i];
return objects[0].toString();
}
}
} return "";
}(2)测试
public static void main(String[] args) { Object[] objects = new Object[5];
UserVO userVO = new UserVO("zhansan", "888");
objects[0] = userVO;
objects[1] = new Date(); String childValue = getChildValueFromList(objects, 2);
System.out.println("childValue: " + childValue);
}
java 怎样 改变 数组元素的值的更多相关文章
- vue项目中,更改数组元素的值,视图没有实时更新?
问题背景: export default { data(){ showItems: [false, false, false, false] }, methods: { showItem(index) ...
- js改变HTML元素的值
js改变HTML元素的值(常用,备忘) <!DOCTYPE html> <html> <body> <h1>我的第一段 JavaScript</h ...
- Java-Runoob-高级教程-实例-方法:02. Java 实例 – 输出数组元素
ylbtech-Java-Runoob-高级教程-实例-方法:02. Java 实例 – 输出数组元素 1.返回顶部 1. Java 实例 - 输出数组元素 Java 实例 以下实例演示了如何通过重 ...
- Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素
ylbtech-Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素 1.返回顶部 1. Java 实例 - 删除数组元素 Java 实例 以下实例演示了如何使用 ...
- java算法面试题:有数组a[n],用java代码将数组元素顺序颠倒
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...
- for-each用法误区(不能改变数组元素值)
代码例程: /** * 数据加密传输 */ import java.util.Scanner; public class secretPass { public static void m ...
- php的array数组 -------方法foreach循环时候,利用数组里值的引用地址(& )从而改变数组里的值
/* * 把每个数组值后面都加个SQL然后返回数组 * foreach循环时候,直接用引用(&)的方式就能改变之前的数组 */public function array_foreach(){ ...
- 用java代码将数组元素顺序颠倒
package test; public class Recover { public int[] reverse(int[] a) { int[] b = new int[a.length]; in ...
- IT兄弟连 Java语法教程 数组 使用foreach循环遍历数组元素
从JDK5之后,Java提供了一种更简单的循环:foreach循环,也叫作增强for循环,这种循环遍历数组和集合更加简洁.使用foreach循环遍历数组和集合元素时,无需获得数组或集合的长度,无需根据 ...
随机推荐
- C#winform单线程事例与多线程事例
通过例子编写,用winform编写的,讲解单线程与多线程使用,用于异步加载数据,界面不会卡死,数据在后台默认加载,给用户更好的体验.稍后会附加完整代码. 1.先不用线程,显示一个求和,计算过程中要停留 ...
- JPA 中 find() 和 getReference() 的区别
在查询的时候有两个方法:find()和getReference(),这两个方法的参数以及调用方式都相同.那么这两个方法有什么不一样的呢? find()称为 立即加载,顾名思义就是在调用的时候立即执行查 ...
- (六)MySQL数据、库、表的管理
目录 数据的管理 库的管理 表的管理 数据的管理 一.数据插入语句 1.语法: INSERT INTO 表名(列名,...) VALUES(值1,...); 2.案例:在beauty表中添加一条信息( ...
- Quartz.Net系列(三):解读Quartz.Net源码领略设计模式在其中的应用
1.Builder(建造者)模式 JobBuilder DateBuilder 其他的Builder(TriggerBuilder.SchedulerBuilder等) 2.抽象工厂模式 ISch ...
- 获取ul下面最后一个li或ul中有多少个li
获取ul下面最后一个li或ul中有多少个li 先获取ul的对象,再通过这个对象获取li的list用for循环取值text之类的 def set_city(self, base_info): quali ...
- Redis面试专题
Redis面试专题 1. 什么是redis? Redis 是一个基于内存的高性能key-value数据库. (有空再补充,有理解错误或不足欢迎指正) 2. Reids的特点 Redis本质上是一个Ke ...
- 专家解读:利用Angular项目与数据库融合实例
摘要:面对如何在现有的低版本的框架服务上,运行新版本的前端服务问题,华为云前端推出了一种融合方案,该方案能让独立的Angular项目整体运行在低版本的框架服务上,通过各种适配手段,让Angular项目 ...
- 【漏洞三】跨站点脚本(XSS)攻击
[漏洞] 跨站点脚本(XSS)攻击 [原因] 跨站点脚本(也称为xss)是一个漏洞,攻击者可以发送恶意代码(通常在(Javascript的形式)给另一个用户.因为浏览器无法知道脚本是否值得信任,所以它 ...
- Perl入门(四)Perl的正则表达式
正则表达式是Perl语言的特色,基本的语法不是很难,但是编写一个符合需求.高效的正则表达式,还是有一些挑战的. Perl的三种匹配模式 1.查找 语法:m/正则表达式内容/; 作用:查找匹配内容中是否 ...
- spring boot admin项目的集成和开发
Spring Boot Admin是一个Github上的一个开源项目,它在Spring Boot Actuator的基础上提供简洁的可视化WEB UI,是用来管理 Spring Boot 应用程序的一 ...