java版js数组

背景:
java数组、列表的抽象程度不够,操作起来相对麻烦。相比而言,js数组方便很多。于是参考js的数组api,对java数组(列表)进行抽象,可以非常方便地进行平常的一些操作。
依赖:
只是在toString方法中依赖了fastjson,所以就不贴pom.xml了。
代码:
1、接口

package org.jsirenia.array;

import java.util.Comparator;
import java.util.List;
import java.util.Map;

import org.jsirenia.util.callback.Callback11;
import org.jsirenia.util.callback.Callback20;
import org.jsirenia.util.callback.Callback21;
import org.jsirenia.util.callback.Callback30;
import org.jsirenia.util.callback.Callback31;
import org.jsirenia.util.callback.Callback41;

public interface Array<T> extends Iterable<T>{
		public List<T> toList();
		public <E> Array<E> map(Callback11<E,T> cb);
		public <E> Array<E> map(Callback21<E,T,Integer> cb);
		public <E> Array<E> map(Callback31<E,T,Integer,Array<T>> cb);
		public Object[] toArray();
		public T[] toArray(Class<T> clazz);
		public T reduce(Callback31<T,T,T,Integer> cb,T initValue);
		public T reduce(Callback41<T,T,T,Integer,Array<T>> cb,T initValue);
		public T reduce(Callback21<T,T,T> cb,T initValue);
		public Array<T> filter(Callback11<Boolean,T> cb);
		public Array<T> filter(Callback21<Boolean,T,Integer> cb);
		public Array<T> filter(Callback31<Boolean,T,Integer,Array<T>> cb);
		public <R> Map<R,Array<T>> groupBy(Callback11<R,T> cb);
		public <R> Map<R,Array<T>> groupBy(Callback21<R,T,Integer> cb);
		public <R> Map<R,Array<T>> groupBy(Callback31<R,T,Integer,Array<T>> cb);
		public String join();
		public String join(String seperator);
		public boolean every(Callback31<Boolean,T,Integer,Array<T>> cb);
		public boolean every(Callback21<Boolean,T,Integer> cb);
		public boolean every(Callback11<Boolean,T> cb);
		public boolean some(Callback31<Boolean,T,Integer,Array<T>> cb);
		public boolean some(Callback21<Boolean,T,Integer> cb);
		public boolean some(Callback11<Boolean,T> cb);
		public int push(T v1,T v2,T v3,T v4,T v5,T v6,T v7,T v8,T v9,T v10);
		public int push(T v1,T v2,T v3,T v4,T v5,T v6,T v7,T v8,T v9);
		public int push(T v1,T v2,T v3,T v4,T v5,T v6,T v7,T v8);
		public int push(T v1,T v2,T v3,T v4,T v5,T v6,T v7);
		public int push(T v1,T v2,T v3,T v4,T v5,T v6);
		public int push(T v1,T v2,T v3,T v4,T v5);
		public int push(T v1,T v2,T v3,T v4);
		public int push(T v1,T v2,T v3);
		public int push(T v1,T v2);
		public int push(T v1);
		public T pop();
		public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4,Array<T> a5,Array<T> a6,Array<T> a7,Array<T> a8,Array<T> a9,Array<T> a10);
		public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4,Array<T> a5,Array<T> a6,Array<T> a7,Array<T> a8,Array<T> a9);
		public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4,Array<T> a5,Array<T> a6,Array<T> a7,Array<T> a8);
		public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4,Array<T> a5,Array<T> a6,Array<T> a7);
		public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4,Array<T> a5,Array<T> a6);
		public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4,Array<T> a5);
		public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4);
		public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3);
		public Array<T> concat(Array<T> a1,Array<T> a2);
		public Array<T> concat(Array<T> a1);
		public Array<T> concat(T v1,T v2,T v3,T v4,T v5,T v6,T v7,T v8,T v9,T v10);
		public Array<T> concat(T v1,T v2,T v3,T v4,T v5,T v6,T v7,T v8,T v9);
		public Array<T> concat(T v1,T v2,T v3,T v4,T v5,T v6,T v7,T v8);
		public Array<T> concat(T v1,T v2,T v3,T v4,T v5,T v6,T v7);
		public Array<T> concat(T v1,T v2,T v3,T v4,T v5,T v6);
		public Array<T> concat(T v1,T v2,T v3,T v4,T v5);
		public Array<T> concat(T v1,T v2,T v3,T v4);
		public Array<T> concat(T v1,T v2,T v3);
		public Array<T> concat(T v1,T v2);
		public Array<T> concat(T v1);
		public int unshift();
		public T shift();
		public Array<T> splice();
		public Array<T> slice(int start);
		public Array<T> slice(int start, int end);
		public void sort(Comparator<? super T> c);
		public void sort();
		public Array<T> reverse();
		public T reduceRight(Callback41<T,T,T,Integer,Array<T>> cb,T initValue);
		public T reduceRight(Callback31<T,T,T,Integer> cb,T initValue);
		public T reduceRight(Callback21<T,T,T> cb,T initValue);
		public int lastIndexOf(T t);
		public int indexOf(T t);
		public T find(Callback11<Boolean,T> cb);
		public int findIndex(Callback11<Boolean,T> cb);
		public Array<T> fill(T t,int start,int end);
		public void forEach(Callback20<T,Integer> cb);
		public void forEach(Callback30<T,Integer,Array<T>> cb);
		public boolean inclueds();
		public Array<Integer> keys();
	}


2、实现

package org.jsirenia.array;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.jsirenia.util.callback.Callback11;
import org.jsirenia.util.callback.Callback20;
import org.jsirenia.util.callback.Callback21;
import org.jsirenia.util.callback.Callback30;
import org.jsirenia.util.callback.Callback31;
import org.jsirenia.util.callback.Callback41;

import com.alibaba.fastjson.JSONArray;
/**
 * 非常方便进行map,reduce,filter等操作。js版数组
 * 性能嘛,当然和java的stream没法比。
 * 挺有意思的,操作数据很6很方便
 */
public class JArray<T> implements Array<T>{
	private List<T> list;
	public JArray(){
		list = new ArrayList<>();
	}
	public static <E> JArray<E> of(List<E> list){
		JArray<E> array = new JArray<>();
		array.list = list;
		return array;
	}
	@SafeVarargs
	public static <E> JArray<E> of(E... objects){
		JArray<E> array = new JArray<>();
		array.list = new ArrayList<>();
		if(objects==null){
			return array;
		}
		for(int i=0;i<objects.length;i++){
			array.list.add(objects[i]);
		}
		return array;
	}
	@Override
	public List<T> toList(){
		return list;
	}
	@Override
	public <E> Array<E> map(Callback11<E,T> cb){
		List<E> localList = new ArrayList<>();
		for(int i=0;i<list.size();i++){
			localList.add(cb.apply(list.get(i)));
		}
		return JArray.of(localList);
	}
	@Override
	public <E> Array<E> map(Callback21<E,T,Integer> cb){
		List<E> localList = new ArrayList<>();
		for(int i=0;i<list.size();i++){
			localList.add(cb.apply(list.get(i),i));
		}
		return JArray.of(localList);
	}
	@Override
	public <E> Array<E> map(Callback31<E,T,Integer,Array<T>> cb){
		List<E> localList = new ArrayList<>();
		for(int i=0;i<list.size();i++){
			localList.add(cb.apply(list.get(i),i,this));
		}
		return JArray.of(localList);
	}
	@Override
	public Object[] toArray(){
		return (Object[]) java.lang.reflect.Array.newInstance(Object.class, list.size());
	}
	@Override
	@SuppressWarnings("unchecked")
	public T[] toArray(Class<T> clazz){
		T[] array = (T[]) java.lang.reflect.Array.newInstance(clazz, list.size());
		for(int i=0;i<array.length;i++){
			array[i] = list.get(i);
		}
		return array;
	}
	@Override
	public T reduce(Callback31<T,T,T,Integer> cb,T initValue){
		T v = initValue;
		for(int i=0;i<list.size();i++){
			v = cb.apply(v, list.get(i), i);
		}
		return v;
	}
	@Override
	public T reduce(Callback41<T,T,T,Integer,Array<T>> cb,T initValue){
		T v = initValue;
		for(int i=0;i<list.size();i++){
			v = cb.apply(v, list.get(i), i ,this);
		}
		return v;
	}
	@Override
	public T reduce(Callback21<T,T,T> cb,T initValue){
		T v = initValue;
		for(int i=0;i<list.size();i++){
			v = cb.apply(v, list.get(i));
		}
		return v;
	}
	@Override
	public Array<T> filter(Callback11<Boolean,T> cb){
		List<T> newList = new ArrayList<>(list.size());
		T v = null;
		for(int i=0;i<list.size();i++){
			v = list.get(i);
			if(cb.apply(v)){
				newList.add(v);
			}
		}
		JArray<T> array = new JArray<>();
		array.list = newList;
		return array;
	}
	@Override
	public Array<T> filter(Callback21<Boolean,T,Integer> cb){
		List<T> newList = new ArrayList<>(list.size());
		T v = null;
		for(int i=0;i<list.size();i++){
			v = list.get(i);
			if(cb.apply(v,i)){
				newList.add(v);
			}
		}
		JArray<T> array = new JArray<>();
		array.list = newList;
		return array;
	}
	@Override
	public Array<T> filter(Callback31<Boolean,T,Integer,Array<T>> cb){
		List<T> newList = new ArrayList<>(list.size());
		T v = null;
		for(int i=0;i<list.size();i++){
			v = list.get(i);
			if(cb.apply(v,i,this)){
				newList.add(v);
			}
		}
		JArray<T> array = new JArray<>();
		array.list = newList;
		return array;
	}
	@Override
	public <R> Map<R,Array<T>> groupBy(Callback11<R,T> cb){
		Map<R,Array<T>> map = new HashMap<>();
		T v;
		R k;
		Array<T> array;
		for(int i=0;i<list.size();i++){
			v = list.get(i);
			k = cb.apply(v);
			array = map.get(k);
			if(array==null){
				array = JArray.of();
				map.put(k, array);
			}
			array.push(v);
		}
		return map;
	}
	@Override
	public <R> Map<R,Array<T>> groupBy(Callback21<R,T,Integer> cb){
		Map<R,Array<T>> map = new HashMap<>();
		T v;
		R k;
		Array<T> array;
		for(int i=0;i<list.size();i++){
			v = list.get(i);
			k = cb.apply(v,i);
			array = map.get(k);
			if(array==null){
				array = JArray.of();
				map.put(k, array);
			}
			array.push(v);
		}
		return map;
	}
	@Override
	public <R> Map<R,Array<T>> groupBy(Callback31<R,T,Integer,Array<T>> cb){
		Map<R,Array<T>> map = new HashMap<>();
		T v;
		R k;
		Array<T> array;
		for(int i=0;i<list.size();i++){
			v = list.get(i);
			k = cb.apply(v,i,this);
			array = map.get(k);
			if(array==null){
				array = JArray.of();
				map.put(k, array);
			}
			array.push(v);
		}
		return map;
	}
	@Override
	public String join(){
		return join(",");
	}
	@Override
	public String join(String seperator){
		StringBuilder sb = new StringBuilder();
		Iterator<T> iter = this.iterator();
		T t;
		if(iter.hasNext()){
			t = iter.next();
			sb.append(String.valueOf(t));
		}
		while(iter.hasNext()){
			t = iter.next();
			sb.append(seperator).append(String.valueOf(t));
		}
		return sb.toString();
	}
	@Override
	public boolean every(Callback31<Boolean,T,Integer,Array<T>> cb){
		for(int i=0;i<list.size();i++){
			if(!cb.apply(list.get(i), i, this)){
				return false;
			}
		}
		return true;
	}
	@Override
	public boolean every(Callback21<Boolean,T,Integer> cb){
		for(int i=0;i<list.size();i++){
			if(!cb.apply(list.get(i), i)){
				return false;
			}
		}
		return true;
	}
	@Override
	public boolean every(Callback11<Boolean,T> cb){
		for(int i=0;i<list.size();i++){
			if(!cb.apply(list.get(i))){
				return false;
			}
		}
		return true;
	}
	@Override
	public boolean some(Callback31<Boolean,T,Integer,Array<T>> cb){
		for(int i=0;i<list.size();i++){
			if(cb.apply(list.get(i),i,this)){
				return true;
			}
		}
		return false;
	}
	@Override
	public boolean some(Callback21<Boolean,T,Integer> cb){
		for(int i=0;i<list.size();i++){
			if(cb.apply(list.get(i),i)){
				return true;
			}
		}
		return false;
	}
	@Override
	public boolean some(Callback11<Boolean,T> cb){
		for(int i=0;i<list.size();i++){
			if(cb.apply(list.get(i))){
				return true;
			}
		}
		return false;
	}
	@Override
	public int push(T v1,T v2,T v3,T v4,T v5,T v6,T v7,T v8,T v9,T v10){
		list.add(v1);
		list.add(v2);
		list.add(v3);
		list.add(v4);
		list.add(v5);
		list.add(v6);
		list.add(v7);
		list.add(v8);
		list.add(v9);
		list.add(v10);
		return list.size();
	}
	@Override
	public int push(T v1,T v2,T v3,T v4,T v5,T v6,T v7,T v8,T v9){
		list.add(v1);
		list.add(v2);
		list.add(v3);
		list.add(v4);
		list.add(v5);
		list.add(v6);
		list.add(v7);
		list.add(v8);
		list.add(v9);
		return list.size();
	}
	@Override
	public int push(T v1,T v2,T v3,T v4,T v5,T v6,T v7,T v8){
		list.add(v1);
		list.add(v2);
		list.add(v3);
		list.add(v4);
		list.add(v5);
		list.add(v6);
		list.add(v7);
		list.add(v8);
		return list.size();
	}
	@Override
	public int push(T v1,T v2,T v3,T v4,T v5,T v6,T v7){
		list.add(v1);
		list.add(v2);
		list.add(v3);
		list.add(v4);
		list.add(v5);
		list.add(v6);
		list.add(v7);
		return list.size();
	}
	@Override
	public int push(T v1,T v2,T v3,T v4,T v5,T v6){
		list.add(v1);
		list.add(v2);
		list.add(v3);
		list.add(v4);
		list.add(v5);
		list.add(v6);
		return list.size();
	}
	@Override
	public int push(T v1,T v2,T v3,T v4,T v5){
		list.add(v1);
		list.add(v2);
		list.add(v3);
		list.add(v4);
		list.add(v5);
		return list.size();
	}
	@Override
	public int push(T v1,T v2,T v3,T v4){
		list.add(v1);
		list.add(v2);
		list.add(v3);
		list.add(v4);
		return list.size();
	}
	@Override
	public int push(T v1,T v2,T v3){
		list.add(v1);
		list.add(v2);
		list.add(v3);
		return list.size();
	}
	@Override
	public int push(T v1,T v2){
		list.add(v1);
		list.add(v2);
		return list.size();
	}
	@Override
	public int push(T v1){
		list.add(v1);
		return list.size();
	}
	@Override
	public T pop(){
		return list.remove(list.size()-1);
	}
	//最多支持10个元素。可变参数版本调用方也会有警告,哎!
	@Override
	@SuppressWarnings("unchecked")
	public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4,Array<T> a5,Array<T> a6,Array<T> a7,Array<T> a8,Array<T> a9,Array<T> a10){
		return concat(new Array[]{a1,a2,a3,a4,a5,a6,a7,a8,a9,a10});
	}
	@Override
	@SuppressWarnings("unchecked")
	public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4,Array<T> a5,Array<T> a6,Array<T> a7,Array<T> a8,Array<T> a9){
		return concat(new Array[]{a1,a2,a3,a4,a5,a6,a7,a8,a9});
	}
	@Override
	@SuppressWarnings("unchecked")
	public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4,Array<T> a5,Array<T> a6,Array<T> a7,Array<T> a8){
		return concat(new Array[]{a1,a2,a3,a4,a5,a6,a7,a8});
	}
	@Override
	@SuppressWarnings("unchecked")
	public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4,Array<T> a5,Array<T> a6,Array<T> a7){
		return concat(new Array[]{a1,a2,a3,a4,a5,a6,a7});
	}
	@Override
	@SuppressWarnings("unchecked")
	public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4,Array<T> a5,Array<T> a6){
		return concat(new Array[]{a1,a2,a3,a4,a5,a6});
	}
	@Override
	@SuppressWarnings("unchecked")
	public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4,Array<T> a5){
		return concat(new Array[]{a1,a2,a3,a4,a5});
	}
	@Override
	@SuppressWarnings("unchecked")
	public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3,Array<T> a4){
		return concat(new Array[]{a1,a2,a3,a4});
	}
	@Override
	@SuppressWarnings("unchecked")
	public Array<T> concat(Array<T> a1,Array<T> a2,Array<T> a3){
		return concat(new Array[]{a1,a2,a3});
	}
	@Override
	@SuppressWarnings("unchecked")
	public Array<T> concat(Array<T> a1,Array<T> a2){
		return concat(new Array[]{a1,a2});
	}
	@Override
	//只有一个的情况,优化一下,这种情况使用概率较高
	public Array<T> concat(Array<T> a1){
		List<T> newList = new ArrayList<>(list.size()+a1.toList().size());
		newList.addAll(list);
		newList.addAll(a1.toList());
		return JArray.of(newList);
	}
	private Array<T> concat(Array<T>[] anothers){
		int size = list.size();
		for(int i=0;i<anothers.length;i++){
			size+=anothers[i].toList().size();
		}
		List<T> newList = new ArrayList<>(size);
		newList.addAll(list);
		for(int i=0;i<anothers.length;i++){
			newList.addAll(anothers[i].toList());
		}
		return JArray.of(newList);
	}
	@Override
	public Array<T> concat(T v1,T v2,T v3,T v4,T v5,T v6,T v7,T v8,T v9,T v10){
		List<T> newList = new ArrayList<>(list.size()+10);
		newList.addAll(list);
		newList.add(v1);
		newList.add(v2);
		newList.add(v3);
		newList.add(v4);
		newList.add(v5);
		newList.add(v6);
		newList.add(v7);
		newList.add(v8);
		newList.add(v9);
		newList.add(v10);
		return JArray.of(newList);
	}
	@Override
	public Array<T> concat(T v1,T v2,T v3,T v4,T v5,T v6,T v7,T v8,T v9){
		List<T> newList = new ArrayList<>(list.size()+9);
		newList.addAll(list);
		newList.add(v1);
		newList.add(v2);
		newList.add(v3);
		newList.add(v4);
		newList.add(v5);
		newList.add(v6);
		newList.add(v7);
		newList.add(v8);
		newList.add(v9);
		return JArray.of(newList);
	}
	@Override
	public Array<T> concat(T v1,T v2,T v3,T v4,T v5,T v6,T v7,T v8){
		List<T> newList = new ArrayList<>(list.size()+8);
		newList.addAll(list);
		newList.add(v1);
		newList.add(v2);
		newList.add(v3);
		newList.add(v4);
		newList.add(v5);
		newList.add(v6);
		newList.add(v7);
		newList.add(v8);
		return JArray.of(newList);
	}
	@Override
	public Array<T> concat(T v1,T v2,T v3,T v4,T v5,T v6,T v7){
		List<T> newList = new ArrayList<>(list.size()+7);
		newList.addAll(list);
		newList.add(v1);
		newList.add(v2);
		newList.add(v3);
		newList.add(v4);
		newList.add(v5);
		newList.add(v6);
		newList.add(v7);
		return JArray.of(newList);
	}
	@Override
	public Array<T> concat(T v1,T v2,T v3,T v4,T v5,T v6){
		List<T> newList = new ArrayList<>(list.size()+6);
		newList.addAll(list);
		newList.add(v1);
		newList.add(v2);
		newList.add(v3);
		newList.add(v4);
		newList.add(v5);
		newList.add(v6);
		return JArray.of(newList);
	}
	@Override
	public Array<T> concat(T v1,T v2,T v3,T v4,T v5){
		List<T> newList = new ArrayList<>(list.size()+5);
		newList.addAll(list);
		newList.add(v1);
		newList.add(v2);
		newList.add(v3);
		newList.add(v4);
		newList.add(v5);
		return JArray.of(newList);
	}
	@Override
	public Array<T> concat(T v1,T v2,T v3,T v4){
		List<T> newList = new ArrayList<>(list.size()+4);
		newList.addAll(list);
		newList.add(v1);
		newList.add(v2);
		newList.add(v3);
		newList.add(v4);
		return JArray.of(newList);
	}
	@Override
	public Array<T> concat(T v1,T v2,T v3){
		List<T> newList = new ArrayList<>(list.size()+3);
		newList.addAll(list);
		newList.add(v1);
		newList.add(v2);
		newList.add(v3);
		return JArray.of(newList);
	}
	@Override
	public Array<T> concat(T v1,T v2){
		List<T> newList = new ArrayList<>(list.size()+2);
		newList.addAll(list);
		newList.add(v1);
		newList.add(v2);
		return JArray.of(newList);
	}
	@Override
	public Array<T> concat(T v1){
		List<T> newList = new ArrayList<>(list.size()+1);
		newList.addAll(list);
		newList.add(v1);
		return JArray.of(newList);
	}
	/*private Array<T> concat(T[] values){
		if(values==null){
			throw new RuntimeException("anothers can not be null");
		}
		List<T> newList = new ArrayList<>(list.size()+values.length);
		newList.addAll(list);
		for(int i=0;i<values.length;i++){
			newList.add(values[i]);
		}
		return JArray.of(newList);
	}*/
	@Override
	public int unshift(){
		throw new RuntimeException("method unshift is not supported!");
	}
	@Override
	public T shift(){
		throw new RuntimeException("method shift is not supported!");
	}
	@Override
	public Array<T> splice(){
		throw new RuntimeException("method splice is not supported!");
	}
	@Override
	public Array<T> slice(int start){
		return slice(start,list.size());
	}
	@Override
	public Array<T> slice(int start, int end){
		int size = list.size();
		if(start<0){
			start = start+size;
		}
		if(end<0){
			end = end+size; 
		}
		int newSize = end-start;
		List<T> newList = null;
		if(newSize>0){
			newList = new ArrayList<>(newSize);
		}else{
			newList = new ArrayList<>();
		}
		for(int i=start;i<end;i++){
			newList.add(list.get(i));
		}
		return JArray.of(newList);
	}
	@Override
	public void sort(Comparator<? super T> c){
		list.sort(c);
	}
	@Override
	@SuppressWarnings("unchecked")
	public void sort(){
		list.sort((v1,v2)->{
			Comparable<T> c1 = (Comparable<T>) v1;
			return c1.compareTo(v2);
		});
	}
	@Override
	public Array<T> reverse(){
		Collections.reverse(list);
		return this;
	}
	@Override
	public T reduceRight(Callback41<T,T,T,Integer,Array<T>> cb,T initValue){
		T v = initValue;
		for(int i=list.size()-1;i>=0;i--){
			v = cb.apply(v, list.get(i), i ,this);
		}
		return v;
	}
	@Override
	public T reduceRight(Callback31<T,T,T,Integer> cb,T initValue){
		T v = initValue;
		for(int i=list.size()-1;i>=0;i--){
			v = cb.apply(v, list.get(i), i);
		}
		return v;
	}
	@Override
	public T reduceRight(Callback21<T,T,T> cb,T initValue){
		T v = initValue;
		for(int i=list.size()-1;i>=0;i--){
			v = cb.apply(v, list.get(i));
		}
		return v;
	}
	@Override
	public int lastIndexOf(T t){
		return list.lastIndexOf(t);
	}
	@Override
	public int indexOf(T t){
		return list.indexOf(t);
	}
	@Override
	public T find(Callback11<Boolean,T> cb){
		for(int i=0;i<list.size();i++){
			if(cb.apply(list.get(i))){
				return list.get(i);
			}
		}
		return null;
	}
	@Override
	public int findIndex(Callback11<Boolean,T> cb){
		for(int i=0;i<list.size();i++){
			if(cb.apply(list.get(i))){
				return i;
			}
		}
		return -1;
	}
	@Override
	public Array<T> fill(T t,int start,int end){
		int size = list.size();
		if(start<0){
			start = start+size;
		}
		if(end<0){
			end = end+size; 
		}
		for(int i=start;i<end;i++){
			list.set(i, t);
		}
		return this;
	}
	@Override
	public void forEach(Callback20<T,Integer> cb){
		for(int i=0;i<list.size();i++){
			cb.apply(list.get(i),i);
		}
	}
	@Override
	public void forEach(Callback30<T,Integer,Array<T>> cb){
		for(int i=0;i<list.size();i++){
			cb.apply(list.get(i),i,this);
		}
	}
	@Override
	public boolean inclueds(){
		throw new RuntimeException("method inclueds is not supported!");
	}
	@Override
	public Array<Integer> keys(){
		throw new RuntimeException("method keys is not supported!");
	}
	@Override
	public Iterator<T> iterator() {
		return list.listIterator();
	}
	@Override
	public String toString(){
		return JSONArray.toJSONString(list);
	}
	public static <E> Array<E> fromString(String str,Class<E> clazz){
		return JArray.of(JSONArray.parseArray(str, clazz));
	}
	public static Array<String> split(String text,String sepratorReg){
		String[] arr = text.split(sepratorReg);
		return JArray.of(arr);
	}
}


3、工具类
3.1

package org.jsirenia.util.callback;
/**
 * 0个入参,没有返回值
 */
@FunctionalInterface
public interface Callback00{
	public void apply();
}

3.2

package org.jsirenia.util.callback;
/**
 * 0个入参,1个返回值
 */
@FunctionalInterface
public interface Callback01<T>{
	public T apply();
}

3.3

package org.jsirenia.util.callback;
/**
 * 1个入参,没有返回值
 */
@FunctionalInterface
public interface Callback10<T>{
	public void apply(T t);
}

3.4

package org.jsirenia.util.callback;
@FunctionalInterface
public interface Callback11<R,T>{
	public R apply(T t);
}

3.5

package org.jsirenia.util.callback;
/**
 * 2个入参,没有返回值
 */
@FunctionalInterface
public interface Callback20<T1,T2>{
	public void apply(T1 t1,T2 t2);
}

3.6

package org.jsirenia.util.callback;
@FunctionalInterface
public interface Callback21<R,T1,T2>{
	public R apply(T1 t1,T2 t2);
}

3.7

package org.jsirenia.util.callback;
/**
 * 3个入参,没有返回值
 */
@FunctionalInterface
public interface Callback30<T1,T2,T3>{
	public void apply(T1 t1,T2 t2,T3 t3);
}

3.8

package org.jsirenia.util.callback;
/**
 * 3个入参,1个返回值
 */
@FunctionalInterface
public interface Callback31<R,T1,T2,T3>{
	public R apply(T1 t1,T2 t2,T3 t3);
}

3.9

package org.jsirenia.util.callback;
/**
 * 3个入参,1个返回值
 */
@FunctionalInterface
public interface Callback41<R,T1,T2,T3,T4>{
	public R apply(T1 t1,T2 t2,T3 t3,T4 t4);
}

4.测试

public static void main(String[] args) {
		String[] array = JArray.of("hello","world").toArray(String.class);
		System.out.println(array);
		JArray<String> jarray = JArray.of("hello","world","jsirenia");
		String res = jarray.filter(i->i.contains("l")).map(t->{
			return t.toUpperCase();
		}).reduce((prev,curr)->prev+" "+curr, "");
		System.out.println(res);
		for(String item : jarray){
			System.out.println(item);
		}
		JArray<String> jarray2 = JArray.of(new String[]{"hello","hworld","jsirenia"});
		System.out.println(jarray2.join(","));
		String s = jarray.concat(jarray2).join(",");
		System.out.println(s);
		
		jarray.sort();
		System.out.println(jarray.join());
		
		Map<String,Array<String>> map = jarray2.groupBy(t->{
			return t.charAt(0)+"";
		});
		System.out.println(map);
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值