您的位置:首页 > 其它

工具(二):数组常用操作工具类

2017-06-01 15:10 197 查看
    老规矩,上代码,使用方式,我想注释写的很明确了,如果看不懂,导入到你的java工程中,测试下,如果有问题,请在评论中说明,谢谢。要坚信:动手就会有收获!

package com.wdy.tools.utils.arrayutil;

import java.util.Arrays;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ArrayUtil {

private static final Log log = LogFactory.getLog(ArrayUtil.class);

/**
* 数组所有元素求和
*
* @param arr
*            要求和的数组(数组为Object类型,但元素是数值类型)
* @return
*/
public static double getArraySumValue(Object[] arr) {
double[] dou = getObjectArrayToDoubleArray(arr);
double sum = 0.0;
for (int i = 0; i < dou.length; i++) {
sum += dou[i];
}
return sum;
}

/**
* 获取两个数组的累加后的数组(要求两个数组元素个数相同)
*
* @param arr1  数组(数组为Object类型,但元素是数值类型)
* @param arr2  数组(数组为Object类型,但元素是数值类型)
* @return 求和后的新数组
*/
public static double[] getTwoArraySumValue(Object[] arr1, Object[] arr2) {
double[] dou1 = getObjectArrayToDoubleArray(arr1);
double[] dou2 = getObjectArrayToDoubleArray(arr2);
double[] dou = new double[dou1.length];
if (arr1.length==arr2.length) {
for (int i = 0; i < dou1.length; i++) {
dou[i] = dou1[i] + dou2[i];
}
}else {
log.info("两个数组的长度不相同");
}
return dou;
}

/**
* 获取数据的字符串形式{,,,}
* @param dou 要操作的double类型数组
* @return 返回数据元素拼接的字符串,包含花括号,eg:{, , ,}
*/
public static String getArrayToString(double[] dou) {
String arrString = "{";
if (dou.length > 0) {
for (int i = 0; i < dou.length; i++) {
if (i == 0) {
arrString += dou[i];
} else {
arrString += ("," + dou[i]);
}
}
}
arrString += "}";
return arrString;
}

/**
* 获取两个数组的相比后的数组(要求两个数据的长度相同)
*
* @param arr1
*            分子数组(Object[])
* @param arr2
*            分母数组(Object[])
* @return
*/
public static double[] getTwoArrayRateValue(Object[] arr1, Object[] arr2) {
double[] dou1 = getObjectArrayToDoubleArray(arr1);
double[] dou2 = getObjectArrayToDoubleArray(arr2);
double[] dou = new double[dou1.length];
for (int i = 0; i < dou1.length; i++) {
if (dou2[i] != 0) {
dou[i] = dou1[i] / dou2[i];
} else {
dou[i] = 0.0;
}
}
return dou;
}

/**
* 获取两个数组的相比后的数组(要求两个数据的长度相同)
*
* @param arr1
*            分子数组(double[])
* @param arr2
*            分母数组(Object[])
* @return
*/
public static double[] getTwoArrayRateValue(double[] dou1, Object[] arr2) {
// double[] dou1 = getObjectArrayToDoubleArray(arr1);
double[] dou2 = getObjectArrayToDoubleArray(arr2);
double[] dou = new double[dou1.length];
for (int i = 0; i < dou1.length; i++) {
if (dou2[i] != 0) {
dou[i] = dou1[i] / dou2[i];
} else {
dou[i] = 0.0;
}
}
return dou;
}

/**
* 获取Object{元素为double类型}数组的最大值所在的索引位置(0开始)
*
* @param obj
*            要操作的Object数组
* @return
*/
public static int getArrayMaxValueIndex(Object[] obj) {
double[] dou = getObjectArrayToDoubleArray(obj);
double max;
max = dou[0];
int j = 0;
for (int i = 0; i < dou.length; i++) {
if (dou[i] > max) {
j = i;
}
}
return j;
}

/**
* 获取Object{元素为double类型}数组的最大值
*
* @param arr
* @return
*/
public static double getArrayMaxValue(Object[] arr) {
double[] dou = getObjectArrayToDoubleArray(arr);
double max;
max = dou[0];
for (int i = 0; i < dou.length; i++) {
if (dou[i] > max) {
max = dou[i];
}
}
return max;
}

/**
* 获取Object{元素为double类型}数组的最小值所在的索引位置(0开始)
*
* @param obj
*            要操作的Object数组
* @return
*/
public static int getArrayMinValueIndex(Object[] obj) {
double[] dou = getObjectArrayToDoubleArray(obj);
double min;
min = dou[0];
int j = 0;
for (int i = 0; i < dou.length; i++) {
if (dou[i] < min) {
j = i;
}
}
return j;
}

/**
* 获取Object{元素为double类型}数组的最小值
*
* @param arr
* @return
*/
public static double getArrayMinValue(Object[] arr) {
double[] dou = getObjectArrayToDoubleArray(arr);
double min;
min = dou[0];
for (int i = 0; i < dou.length; i++) {
if (dou[i] < min) {
min = dou[i];
}
}
return min;
}

/**
* 获取double数组的最大值所在的索引位置(0开始)
*
* @param arr
* @return
*/
public static int getArrayMaxValueIndex(double[] dou) {
double max;
max = dou[0];
int j = 0;
for (int i = 0; i < dou.length; i++) {
if (dou[i] > max) {
j = i;
}
}
return j;
}

/**
* 获取double数组的最大值
*
* @param arr
* @return
*/
public static double getArrayMaxValue(double[] dou) {
double max;
max = dou[0];
for (int i = 0; i < dou.length; i++) {
if (dou[i] > max) {
max = dou[i];
}
}
return max;
}

/**
* 获取double数组的最小值所在的索引位置(0开始)
*
* @param arr
* @return
*/
public static int getArrayMinValueIndex(double[] dou) {
double min;
min = dou[0];
int j = 0;
for (int i = 0; i < dou.length; i++) {
if (dou[i] < min) {
j = i;
}
}
return j;
}

/**
* 获取double数组的最小值
*
* @param arr 要操作的数组
* @return
*/
public static double getArrayMinValue(double[] dou) {
double min;
min = dou[0];
for (int i = 0; i < dou.length; i++) {
if (dou[i] < min) {
min = dou[i];
}
}
return min;
}

/**
* 将一个object形式的数字的数组转换为double[]数组
*
* @param obj
* @return
*/
public static double[] getObjectArrayToDoubleArray(Object[] obj) {
double[] dou = null;
if (obj != null) {
dou = new double[obj.length];
for (int i = 0; i < obj.length; i++) {
dou[i] = Double.parseDouble(obj[i].toString());
}
}
return dou;
}

/**
* 将数组进行升序(小~大)排序
* @param dou
* @return
*/
public static double[] SortArrayByAsc(double[] dou){
Arrays.sort(dou);//从小到大排序
return dou;
}

/**
* 将数组进行降序(大~小)排序
* @param dou
* @return
*/
public static double[] SortArrayByDesc(double[] dou){
Arrays.sort(dou);//从小到大排序
ArrayUtils.reverse(dou);//再反转,成为降序,从大到小
return dou;
}

//Es6数组去重
        testArr() {
            console.log(1)
            var arr = [1, 2, 3, 4, 4, 4, 5, 6, 7, 7, 7, 8, 9, 9, 9, 9, 0, 0, 0, 12];
            var arr2 = [...new Set(arr)];
            console.log(arr2);
        },

}
    测试的代码,这里就不写了,请多动手!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数组 array 工具