JAVA中对List进行查询
作者:_东门吹雪 发布时间:2023-12-17 20:41:20
标签:JAVA,List,查询
List查询
JAVA中从数据库中取数据,根据MyBits返回结果主要有两种类型的List,一种是List<Entity>,还一种是List<Map<String,Object>>,
那么怎样对List结果集进行查询操作呢?当然最常用的是用for循环遍历,但是这个效率比较低下,下面是我认为比较好的操作方式,
对List<Map<String,Object>>的查询
/**
* 从列表中找出包括Value值的列表
* @param list
* @param keyName
* @param value
* @return
*/
public static List<Map<String,Object>> findDataFromListMap(List<Map<String,Object>> list,String keyName,Object value) {
Predicate<Map<String,Object>>predicate = new Predicate<Map<String,Object>>() {
@Override
public boolean evaluate(Map<String,Object> map) {
// TODO Auto-generated method stub
try {
Object val = map.get(keyName);
if(value == null || val == null)
return false;
return val.equals(value);
}
catch (Exception e) {
return false;
}
}
};
List<Map<String,Object>> result = (List<Map<String,Object>>) CollectionUtils.select( list, predicate);
return result;
}
/**
* 多值将交叉查找
* @param list
* @param keyName2ValueMap
* @return
*/
public static List<Map<String,Object>> findDataFromListMapByKeyValues(
List<Map<String,Object>> list,
Map<String,Object> keyName2ValueMap) {
Predicate<Map<String,Object>>predicate = new Predicate<Map<String,Object>>() {
@Override
public boolean evaluate(Map<String,Object> map) {
// TODO Auto-generated method stub
try {
for(Map.Entry<String,Object> entry : keyName2ValueMap.entrySet()){
String keyName = entry.getKey();
Object value = entry.getValue();
Object val = map.get(keyName);
if(StringUtils.isBlank(keyName) || value == null || val == null)
return false;
if(!val.equals(value))
return false;
}
return true;
}
catch (Exception e) {
return false;
}
}
};
List<Map<String,Object>> result = (List<Map<String,Object>>) CollectionUtils.select( list, predicate);
return result;
}
对List<Entity>的查询
/**
* 从列表中找出包括Value值的对象列表
* @param list
* @param methodName
* @param value
* @return
*/
public static <T,V> List<T> findObjFromList(List<T> list,String methodName,V value) {
Predicate<T>predicate = new Predicate<T>() {
@Override
public boolean evaluate(T obj) {
// TODO Auto-generated method stub
try {
Method method = obj.getClass().getMethod(methodName);
@SuppressWarnings("unchecked")
V keyName = (V) method.invoke(obj);
return keyName.equals(value);
}
catch (Exception e) {
return false;
}
}
};
List<T> result = (List<T>) CollectionUtils.select( list, predicate);
return result;
}
来源:https://blog.csdn.net/octdream/article/details/88963179


猜你喜欢
- 在Android中图片的自动切换不仅可以实现自动切换,而且还可以使用手动切换。而且一般在切换的时候,在图片下方还带有其他内容的切换,用来标记
- RestTemplate 请求接收自定义400+ 或500+错误场景当服务端自定义400错误返回体时,使用restTemplate 请求接收
- 概述从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章.栈栈 (Stack) 是一种运算受限的线性表, 遵循先进
- SpringMVC AbstractAnnotationConfigDispatcherSerServlet3.0环境中,容器会在类路径中查
- 问题场景今天小编在MyBatis 整合Spring 的时候,使用到了@MapperScan,在启动期出现了一个错误:Invalid defa
- 目录获取程序下面的文件获取临时目录下的文件获取程序下面的文件首先我们创建了实例解决方案:其中调用链是:Main.Shell->FooA
- 数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。声明数组变量并不是声明 nu
- 在Android开发中,定时器一般有以下3种实现方法:一、采用Handler与线程的sleep(long)方法二、采用Handler的pos
- 本文实例为大家分享了flutter Container容器实现圆角边框的具体代码,供大家参考,具体内容如下在这里使用 Container 容
- 一、概述SPI(Service Provider Interface),是Java内置的一种服务提供发现机制,可以用来提高框架的扩展性,主要
- Android 使用FragmentTabhost代替Tabhost前言:现在Fragment使用越来越广了,虽然Fragment寄生在Ac
- 本文实例为大家分享了android实现倒计时动态圈的具体代码,供大家参考,具体内容如下效果是这样,没动图:布局:<LinearLayo
- 一、链表的概念和结构1.1 链表的概念简单来说链表是物理上不一定连续,但是逻辑上一定连续的一种数据结构1.2 链表的分类实际中链表的结构非常
- Map映射Map映射是一个java集合存储在键 - 值对的元素,并且不允许在列表中重复的元素。 Map接口提供三种collection视图,
- 最近在写程序的时候,经常遇到大量需要异步访问的情况,但是对于async和await到底怎么写,还不是非常明确。1.普通的程序怎么写?clas
- 文件上传概述实现web开发中的文件上传功能,需完成如下二步操作:在web页面中添加上传输入项在servlet中读取上传文件的数据,并保存到本
- 更新: 工作中突然想起来,关于Yaml的使用,并不属于Spring的范畴,是org.yaml.snakeyaml处理的。所以yaml的使用应
- 本文实例讲述了C#编程实现获取文件夹中所有文件的文件名。分享给大家供大家参考,具体如下:想实现这样一个功能:批量修改一个目录所有jpg文件的
- Windows Data Type.NET Data TypeBOOL, BOOLEANBoolean or Int32BSTRString
- 1. 线程转储简介线程转储(Thread Dump)就是JVM中所有线程状态信息的一次快照。线程转储一般使用文本格式, 可以将其保存到文本文