Java Map转二维数组,Map转数组
================================
©Copyright 蕃薯耀 2021-07-02
https://www.cnblogs.com/fanshuyao/
import java.util.ArrayList;import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.assertj.core.util.Arrays;
/**
* Map转二维数组
*
*/
public class MapArrayUtils {
/**
* Map转二维数组
* @param row Row
* @return
*/
@SuppressWarnings("rawtypes")
public static Object[][] getTwoArrayObject(Map map) {
Object[][] object = null;
if (map != null && !map.isEmpty()) {
int size = map.size();
object = new Object[size][2];
Iterator iterator = map.entrySet().iterator();
for (int i = 0; i < size; i++) {
Map.Entry entry = (Map.Entry) iterator.next();
Object key = entry.getKey();
Object value = entry.getValue();
object[i][0] = key;
object[i][1] = value;
}
}
return object;
}
/**
* 根据指定的keys获取Map中的属性
* @param map
* @param keys
* @return
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static Map<String, Object> getMapByExistKeys(Map map, String[] keys) {
if(map == null || map.isEmpty()) {
return null;
}
if(keys == null || keys.length < 1) {
return null;
}
Map<String, Object> resultMap = new LinkedHashMap<String, Object>(keys.length);
Set<String> set = map.keySet();
for (String key : set) {
if(ArrayUtils.contains(keys, key)) {
resultMap.put(key, map.get(key));
}
}
return resultMap;
}
/**
* 排除指定的keys获取Map中的其它属性
* @param map
* @param excludeKeys 排除的keys
* @return
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static Map<String, Object> getMapByExcludeKeys(Map map, String[] excludeKeys) {
if(map == null || map.isEmpty()) {
return null;
}
Map<String, Object> resultMap = new LinkedHashMap<String, Object>();
Set<String> set = map.keySet();
for (String key : set) {
if(ArrayUtils.contains(excludeKeys, key)) {
continue;
}
resultMap.put(key, map.get(key));
}
return resultMap;
}
/**
* 数据类型转换
* @param value Object
* @param datePattern String
* @return
*/
public static String valueCast(Object value, String datePattern) {
String valueString = "";
//类型转换
if(value == null) {
valueString = "";
}else if(value instanceof String) {
valueString = (String)value;
}else if(value instanceof Date) {//日期时间
Date date = (Date)value;
if(StringUtils.isBlank(datePattern)) {
valueString = DateUtils.formatDateTime(date);
}else {
valueString = DateUtils.format(date, datePattern);
}
}else if(Arrays.isArray(value) || value instanceof Collection) {//数组和集合
//判断是否为数组(建议优先使用Arrays):
//1:Arrays.isArray(value)
//2:value.getClass().isArray()
valueString = JsonUtil.obj2String(value);
}else {
valueString = String.valueOf(value);
}
return valueString;
}
/**
* Map转二维数组
* @param map Map参数
* @param keys 数组,当不为空时,只取keys里面的属性;当为空时,取出所有属性
* @param datePattern 时间转换格式
* @return
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static String[][] getTwoArray(Map map, String[] keys, String datePattern) {
if(map == null || map.isEmpty()) {
return null;
}
if(keys != null && keys.length > 0) {
map = getMapByExistKeys(map, keys);
//需要再次判断map是否为空
if(map == null || map.isEmpty()) {
return null;
}
}
String[][] array = new String[map.size()][2];
Set<String> set = map.keySet();
//数组索引
int index = 0;
for (String key : set) {
if(keys != null && keys.length > 0) {
if(!ArrayUtils.contains(keys, key)) {
continue;
}
}
Object value = map.get(key);
array[index][0] = key;
array[index][1] = valueCast(value, datePattern);
index ++;
}
return array;
}
/**
* Map转二维数组
* @param map Map参数
* @param datePattern 时间转换格式
* @return
*/
@SuppressWarnings("rawtypes")
public static String[][] getTwoArray(Map map, String datePattern){
return getTwoArray(map, null, datePattern);
}
/**
* Map转二维数组
* @param map Map参数
* @param keys 数组,当不为空时,只取keys里面的属性;当为空时,取出所有属性
* @return
*/
@SuppressWarnings("rawtypes")
public static String[][] getTwoArray(Map map, String[] keys){
return getTwoArray(map, keys, null);
}
/**
* Map转二维数组
* @param map Map参数
* @return
*/
@SuppressWarnings("rawtypes")
public static String[][] getTwoArray(Map map){
return getTwoArray(map, null, null);
}
/**
* Map转二维数组
* @param map Map参数
* @param keys 数组,当不为空时,只取keys里面的属性;当为空时,取出所有属性
* @param datePattern 时间转换格式
* @return
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static String[][] getTwoArrayExclude(Map map, String[] excludeKeys, String datePattern) {
if(map == null || map.isEmpty()) {
return null;
}
if(excludeKeys != null && excludeKeys.length > 0) {
map = getMapByExcludeKeys(map, excludeKeys);
//需要再次判断map是否为空
if(map == null || map.isEmpty()) {
return null;
}
}
String[][] array = new String[map.size()][2];
Set<String> set = map.keySet();
//数组索引
int index = 0;
for (String key : set) {
Object value = map.get(key);
array[index][0] = key;
array[index][1] = valueCast(value, datePattern);
index ++;
}
return array;
}
/**
* Map转二维数组
* @param map Map参数
* @param excludeKeys 数组,当不为空时,取排除keys里面的其它属性;当为空时,取出所有属性
* @return
*/
@SuppressWarnings("rawtypes")
public static String[][] getTwoArrayExclude(Map map, String[] excludeKeys){
return getTwoArrayExclude(map, excludeKeys, null);
}
public static void main(String[] args) {
Map<String, Object> map = new LinkedHashMap<String, Object>();
map.put("aa", "11");
map.put("bb", 2);
map.put("cc", true);
map.put("dd", new Date());
map.put("ee", 6.333);
map.put("ff", 66666666666L);
map.put("gg", null);
int[] a = new int[] {1,2,3};
map.put("ii", a);
List<String> j = new ArrayList<String>();
j.add("a");
j.add("aa");
j.add("aaa");
map.put("jj", j);
long start = System.currentTimeMillis();
System.out.println("start = " + start);
String[][] array = getTwoArray(map, null, DateUtils.DATE);
long end = System.currentTimeMillis();
System.out.println("end = " + end);
System.out.println("end - start = " + (end - start));
if(array != null && array.length > 0) {
for(int n = 0; n < array.length; n++) {
System.out.println(array[n][0] + " = " + array[n][1]);
}
}else {
System.out.println("array = " + array);
}
System.out.println("---------------------------------------------");
long start2 = System.currentTimeMillis();
System.out.println("start2 = " + start2);
String[][] array2 = getTwoArray(map, new String[] {"dd", "cc", "ccc", "bb", "EE"}, DateUtils.DATE);
long end2 = System.currentTimeMillis();
System.out.println("end2 = " + end2);
System.out.println("end2 - start2 = " + (end2 - start2));
if(array2 != null && array2.length > 0) {
for(int n = 0; n < array2.length; n++) {
System.out.println(array2[n][0] + " = " + array2[n][1]);
}
}else {
System.out.println("array2 = " + array2);
}
System.out.println("---------------------------------------------");
Map<String, Object> resultMap = getMapByExistKeys(map, new String[]{"aa", "BB", "cc"});
System.out.println("resultMap = " + resultMap);
System.out.println("---------------------------------------------");
Map<String, Object> ExcludeMap = getMapByExcludeKeys(map, new String[]{"aa", "BB", "cc"});
System.out.println("ExcludeMap = " + ExcludeMap);
System.out.println("---------------------------------------------");
long start3 = System.currentTimeMillis();
System.out.println("start3 = " + start3);
String[][] array3 = getTwoArrayExclude(map, new String[]{"aa", "BB", "cc"});
long end3 = System.currentTimeMillis();
System.out.println("end3 = " + end3);
System.out.println("end3 - start3 = " + (end3 - start3));
if(array3 != null && array3.length > 0) {
for(int n = 0; n < array3.length; n++) {
System.out.println(array3[n][0] + " = " + array3[n][1]);
}
}else {
System.out.println("array3 = " + array3);
}
System.out.println("---------------------------------------------");
/*
System.out.println("---------------------------------------------");
Object[][] array22 = getTwoArrayObject(map);
if(array22 != null && array22.length > 0) {
for(int n = 0; n < array22.length; n++) {
System.out.println(array22[n][0] + " = " + array22[n][1]);
}
}else {
System.out.println("array22 = " + array22);
}
*/
}
}
(时间宝贵,分享不易,捐赠回馈,^_^)
================================
©Copyright 蕃薯耀 2021-07-02
https://www.cnblogs.com/fanshuyao/
以上是 Java Map转二维数组,Map转数组 的全部内容, 来源链接: utcz.com/z/392591.html