1. org.apache.commons.lang 的StringUtils类
-
判断字符串部不为null也不为空:
System.out.println(StringUtils.isEmpty("")); //true
注意: -
System.out.println(StringUtils.isEmpty(" ")); //false
注意在空格作非空处理
判断字符串为空白或者为null -
System.out.println(StringUtils.isBlank("")); //true
注意:一般使用此方法判断字符串是否为空或者null
2. org.springframework.util的StringUtils类
判断对象是否为空:isEmpty()
这个可以判断对象,也可以判断string字符串。
3. java启动线程
new Thread(new Runnable() {
@Override
public void run() {
for (Bill bill : billList) {
if(bill.getType() != null && Keys.HTLX_TYPE_DF == bill.getType().getDicId()){
logger.info(sendEleMeterMsg(bill.getWsbzbdbh(), null, null));
}
}
}
}).start();
4、redis的工具类
package com.newtouch.platform.cache;
import com.newtouch.platform.base.json.JsonSerializer;
import com.newtouch.platform.base.json.jackson.JacksonImp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Response;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPipeline;
import java.io.UnsupportedEncodingException;
import java.util.*;
/**
* Created by hxh on 2016/10/28.
*/
public class RedisMemoTool {
private static JsonSerializer jsonSerializer = new JacksonImp();
private static final Logger logger = LoggerFactory.getLogger(RedisMemoTool.class);
static final boolean isOld = false;
private static final String PRE = "FAS_CACHE_";
private static final String LOCK = "_LOCK";
/**
* 共享锁默认失效时间
*/
public static final int LOCKTIMEOUT = 1000*180;
/**
* 设置缓存,key-value
* @param key 关键字
* @param value 值
* @param millisecond 超时时间,单位毫秒; 0或负数表示永久保存,谨慎使用;
*/
public static void set(String key , String value , int millisecond){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
shardedJedis.set(key, value);
expire(shardedJedis,key,millisecond);
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
public static void setToken(String key , String value , long millisecond){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
shardedJedis.set(key, value);
expire(shardedJedis,key,millisecond);
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
/**
* 取值,key-value
* @param key 关键字
* @return
*/
public static String get(String key){
String value = null;
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
value = shardedJedis.get(key);
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
return value;
}
/**
* 取值,key-value
* @param keys 关键字
* @return
*/
public static List<Response<String>> getBatch(String[] keys){
List<Response<String>> result = new ArrayList<>();
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
ShardedJedisPipeline pipe = shardedJedis.pipelined();
for(String key:keys){
result.add(pipe.get(key));
}
pipe.sync();
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
return result;
}
/**
* 缓存列表增加String对象
* @param key 关键字
* @param value 值
* @param millisecond 超时时间,单位毫秒; 0或负数表示永久保存,谨慎使用;
*/
public static void lpush(String key , String value , int millisecond){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
shardedJedis.lpush(key,value);
expire(shardedJedis,key,millisecond);
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
/**
* 缓存列表增加Object对象
* @param key 关键字
* @param row Map<String,Object>型数据记录
* @param millisecond 超时时间,单位毫秒; 0或负数表示永久保存,谨慎使用;
*/
public static void lpushRow(String key , Object row , int millisecond){
JsonSerializer js = new JacksonImp();
String str = js.toJson(row);
RedisMemoTool.lpush(key, str, millisecond);
}
/**
* 缓存列表批量提交
* @param key 关键字
* @param rows List<Map<String,Object>>型数据记录
* @param millisecond 超时时间,单位毫秒; 0或负数表示永久保存,谨慎使用;
* @param isAsc true表示正序,false表示倒序
*/
public static void lpushBatch(String key , List<Map<String,Object>> rows , int millisecond,boolean isAsc) throws Exception {
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
logger.debug("lpushBatch rows total size:"+rows.size()+" ");
try{
ShardedJedisPipeline pipline = shardedJedis.pipelined();
//清空原有数据
pipline.del(key);
long start = new Date().getTime();
if(isAsc){
for(Object row:rows){
String str = jsonSerializer.toJson(row);
pipline.lpush(key,str);
}
}else{
for(Object row:rows){
String str = jsonSerializer.toJson(row);
pipline.rpush(key,str);
}
}
logger.debug("lpushBatch.lpush rows,耗时:" + (new Date().getTime() - start) * 1.00/ (1000) + "s.");
start = new Date().getTime();
if(millisecond>0) {
if (isOld) {
pipline.expire(key, (int) (millisecond / 1000));
} else {
pipline.pexpire(key, millisecond);
}
}
logger.debug("lpushBatch.pipline.expire,耗时:" + (new Date().getTime() - start) * 1.00/ (1000) + "s.");
start = new Date().getTime();
pipline.sync();
logger.debug("lpushBatch.pipline.sync,耗时:" + (new Date().getTime() - start) * 1.00/ (1000) + "s.");
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
/**
* 根据范围获取一段缓存列表的值,每个都是String对象
* @param key 关键字
* @param start 起始
* @param end 截至
*/
public static List<String> lrange(String key , int start, int end ){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
List<String> strList = null;
try {
strList = shardedJedis.lrange(key,start,end);
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
return strList;
}
/**
* 根据范围获取一段缓存列表的值,每个都是Object对象
* @param key 关键字
* @param start 起始
* @param end 截至
*/
public static List<Map<String,Object>> lrangeRow(String key , int start, int end ){
List<String> strList = RedisMemoTool.lrange(key, start, end);
List<Map<String,Object>> objectResult = new ArrayList<>();
Map<String,Object> o = new HashMap<>();
for(String str:strList){
objectResult.add(jsonSerializer.fromJson(str,o.getClass()));
}
return objectResult;
}
/**
* 获取一共list的size
* @param key 关键字
*/
public static Long llen(String key ){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
long length = 0;
try {
length = shardedJedis.llen(key);
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
return length;
}
/**
* 判断内存中是否存在关键字对应的值
* @param key 关键字
* @return
*/
public static boolean exists(String key){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
boolean isExists = false;
try {
isExists = shardedJedis.exists(key);
}catch (Exception e){
e.printStackTrace();
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
return isExists;
}
/**
* 删除关键字对应的值
* @param key 关键字
* @return
*/
public static Long del(String key){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
return shardedJedis.del(key);
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
/**
* 批量删除关键字对应的值
* @param keys 关键字数组
* @return
*/
public static void del(Set<String> keys){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
ShardedJedisPipeline pipeline = shardedJedis.pipelined();
for(String key:keys){
pipeline.del(key);
}
pipeline.sync();
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
/**
* 生成关键字工具
* @param name 名对象称或者报表名称
* @param params 查询条件参数组
* @return
* @throws java.io.UnsupportedEncodingException
*/
public static String createKey(String name,String... params) throws UnsupportedEncodingException,Exception {
String strParam = "";
for(String p:params){
strParam += p;
}
String key = PRE + name + com.newtouch.cloud.common.encrypt.MD5.ComputeHashString(strParam);
return key;
}
/**
* 内存锁,加锁
* @param key key关键字
* @param millisecond 锁自动失效时间,单位毫秒; 0或负数表示永久保存,谨慎使用;
* @return
*/
public static void lock(String key,int millisecond){
String lock = key + LOCK;
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
while(shardedJedis.setnx(lock,"locked") == 0){
Thread.sleep(50);
}
expire(shardedJedis,lock,millisecond);
}catch (Exception e){
e.printStackTrace();
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
/**
* 内存锁,解锁
* @param key key关键字
* @return
*/
public static void unlock(String key) {
String lock = key + LOCK;
del(lock);
}
/**
* 根据key获取缓存列表Object对象
* @param key 关键字
* @param classType Object型数据记录
*/
public static <T> T get(String key , Class<T> classType){
String json = get(key);
return jsonSerializer.fromJson(json,classType);
}
/**
* 缓存列表增加Object对象
* @param key 关键字
* @param obj Object型数据记录
* @param millisecond 超时时间,单位毫秒; 0或负数表示永久保存,谨慎使用;
*/
public static void push(String key , Object obj , int millisecond){
String str = jsonSerializer.toJson(obj);
RedisMemoTool.set(key, str, millisecond);
}
/**
* 缓存保存,key对应map的结构
* @param key 关键字
* @param data 单行数据,Map<String,String>类型
* @param millisecond 超时时间,单位毫秒; 0或负数表示永久保存,谨慎使用;
* @return
*/
public static void hmset(String key,Map<String,String> data,int millisecond){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
shardedJedis.hmset(key,data);
if(millisecond>0){
if(isOld){
shardedJedis.expire(key, (int)(millisecond/1000));
}else{
shardedJedis.pexpire(key,millisecond);
}
}
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
/**
* 根据patten获取所有匹配的key
* @param patten 匹配表达式,例如abc*查询所有abc开头的key
* @return
*/
public static Set<String> keys(String patten){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
Set<String> keys = new HashSet<>();
Collection<Jedis> jedises = shardedJedis.getAllShards();
Iterator<Jedis> it = jedises.iterator();
while(it.hasNext()){
Jedis jedis = it.next();
keys.addAll(jedis.keys(patten));
}
return keys;
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
/**
* 根据key获取map对象
* @param key 关键字
* @return
*/
public static Map<String,String> hgetAll(String key){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
return shardedJedis.hgetAll(key);
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
/**
* 缓存保存,key对应set的结构,常用在建立索引使用
* @param key 关键字
* @param members Set<String>集合对象
* @param millisecond 超时时间,单位毫秒; 0或负数表示永久保存,谨慎使用;
* @return
*/
public static void sadd(String key,String[] members,int millisecond){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
shardedJedis.sadd(key,members);
expire(shardedJedis,key,millisecond);
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
/**
* 缓存保存,key对应set的结构,常用在建立索引使用
* @param key 关键字
* @param member 对象
* @param millisecond 超时时间,单位毫秒; 0或负数表示永久保存,谨慎使用;
* @return
*/
public static void sadd(String key,String member,int millisecond){
sadd(key,new String[]{member},millisecond);
}
/**
* 返回集合中所有成员
* @param key 关键字
* @return
*/
public static Set<String> smembers(String key){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
return shardedJedis.smembers(key);
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
/**
* 缓存保存,key对应set的结构,常用在建立索引使用
* @param key 关键字
* @param scoreMembers Set<String>集合对象
* @param millisecond 超时时间,单位毫秒; 0或负数表示永久保存,谨慎使用;
* @return
*/
public static void zadd(String key,Map<String,Double> scoreMembers,int millisecond){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
shardedJedis.zadd(key , scoreMembers);
expire(shardedJedis,key,millisecond);
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
/**
* 缓存保存,key对应set的结构,常用在建立索引使用
* @param key 关键字
* @param member 对象
* @param score 分值
* @param millisecond 超时时间,单位毫秒; 0或负数表示永久保存,谨慎使用;
* @return
*/
public static void zadd(String key,String member,Double score,int millisecond){
Map<String,Double> scoreMembers = new HashMap<>();
scoreMembers.put(member,score);
zadd(key,scoreMembers,millisecond);
}
/**
* 缓存保存,key对应set的结构,常用在建立索引使用
* @param key 关键字
* @param min Set<String>集合对象
* @param max 超时时间,单位毫秒; 0或负数表示永久保存,谨慎使用;
* @return
*/
public static Set<String> zrangeByScore(String key,Double min,Double max){
ShardedJedis shardedJedis = RedisCache.getShardedJedis();
try {
return shardedJedis.zrangeByScore(key, min, max);
}catch (Exception e){
throw e;
}finally {
if(shardedJedis!=null){
shardedJedis.close();
}
}
}
private static void expire(ShardedJedis shardedJedis,String key,int millisecond){
if(millisecond>0){
if(isOld){
shardedJedis.expire(key, (int)(millisecond/1000));
}else{
shardedJedis.pexpire(key,millisecond);
}
}
}
private static void expire(ShardedJedis shardedJedis,String key,long millisecond){
if(millisecond>0){
if(isOld){
shardedJedis.expire(key, (int)(millisecond/1000));
}else{
shardedJedis.pexpire(key,millisecond);
}
}
}
/**
* 测试代码
* @param args
* @throws java.io.UnsupportedEncodingException
*/
public static void main(String[] args) throws Exception {
RedisMemoTool.del("wawa");
List<Map<String,Object>> list = new ArrayList<>();
Map<String,Object> a1 = new HashMap<>();
a1.put("col",1);
list.add(a1);
Map<String,Object> a2 = new HashMap<>();
a2.put("col",2);
list.add(a2);
Map<String,Object> a3 = new HashMap<>();
a3.put("col",3);
list.add(a3);
RedisMemoTool.lpushBatch("wawa", list, 1000 * 60 * 30, true);
list = new ArrayList<>();
Map<String,Object> a4 = new HashMap<>();
a4.put("col",4);
list.add(a4);
Map<String,Object> a5 = new HashMap<>();
a5.put("col",5);
list.add(a5);
RedisMemoTool.lpushBatch("wawa", list, 1000 * 60 * 30, true);
List<Map<String,Object>> pageResult = RedisMemoTool.lrangeRow("wawa", 0, -1);
for(Map<String,Object> row :pageResult){
System.out.println(row.get("col"));
}
// String[] arr = new String[]{"1","2","3","4","5","6"};
// System.out.println(RedisMemoTool.createKey("ww",arr));
// HashMap map = new HashMap();
// map.put("aaa","s");
// JsonSerializer js = new GsonImpl();
// String str = js.toJson(map);
// RedisMemoTool.set("FAS_CACHE_sc_scClassicQueryUtilsManager_balanceFlag6400130000",str,100000);
// String rel = RedisMemoTool.get("FAS_CACHE_sc_scClassicQueryUtilsManager_balanceFlag6400130000");
// System.out.println(rel);
// RedisMemoTool.set("kk","uuu",1000*60);
// System.out.println(RedisMemoTool.get("kk"));
//
//
// ShardedJedis shardedJedis = RedisCache.getShardedJedis();
// shardedJedis.lpush("yyy","过期");
// shardedJedis.lpush("yyy","meishi");
// shardedJedis.pexpire("yyy",1000*60);
// RedisMemoTool.lpush("yyy","过期",1000*60);
// RedisMemoTool.lpush("yyy","meishi",1000*60);
//
// List<String> strList = RedisMemoTool.lrange("yyy",0,1);
// for(String s:strList){
// System.out.println(s);
// }
//
// List<Map<String,Object>> rows = new ArrayList<>();
// String classicData = "{\"DEBIT_CREDIT\":2131.03,\"BUDAT\":\"20161026\",\"USNAM\":\"51243407@SC\",\"UNIT\":\"A5100:省公司本部\",\"DEBIT__CREDIT\"" +
// ":2131.03,\"ZZSY_ORI\":\"CW-CFBZ\",\"ECONOMIC\":\"FY010101:经济事项名称(暂无)\",\"SGTXT\":\"付省公司本部电视宽带部报冯艳梅外埠差旅费\",\"BUZEI\"" +
// ":\"002\",\"PERIOD\":\"201610\",\"DEBIT\":2131.03,\"CREDIT\":0.0,\"KOSTL\":\"A510000036\",\"PRCTR\":\"A510000\",\"HKONT\"" +
// ":\"6400160901\",\"BELNR\":\"3300081869\",\"BLDAT\":\"20161026\",\"LTEXT\":\"省本部.电视宽带部\",\"BKTXT\":\"省公司本部电视宽带部报外埠差旅费\",\"NUMPG\"" +
// ":\"004\"}";
// JsonSerializer js = new GsonImpl();
// for(int i = 0;i<124764;i++){
// Map<String,Object> row = js.fromJson(classicData,new HashMap<String,Object>().getClass());
// rows.add(row);
// }
// System.out.println("start...");
// long start = new Date().getTime();
// lpushBatch(key , rows , 1000*60*30,false);
// System.out.println("lpushBatch,耗时:" + (new Date().getTime() - start) * 1.00/ (1000) + "s.");
}
}
5、使用fastJson转json对象
- JSONObject与String、实体类互相转换
1、实体类对象转换成String类型的JSON字符串
JSONObject.toJSONString(实体类对象) == String
2、String类型的JSON字符串转换成实体类对象
JSONObject.toJavaObject(JSON字符串,实体类对象) == 实体
3、Json字符串转换成JSONObject对象
JSONObject.parseObject(JSON字符串) == JSONObject
4、JSON字符串转换成实体类对象
JSONObject.parseObject(JSON字符串,实体类对象) == 实体
- 转jsonArray
1、string转jsonArray
JSONArray jsonArray= JSONArray.parseArray(String);
2、List转JSONArray
JSONArray.parseArray(JSON.toJSONString(list));
3、JSONArray转List
JSONObject.parseArray(array.toJSONString(), EventColAttr.class);
4、字符串转List
JSONObject.parseArray(str,T.class);