zoukankan      html  css  js  c++  java
  • java 的 linq,不要再写令人讨厌的 for 了!

    package com.ly.linq;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    
    public class Enm {
        public static <T> ArrayList<T> notNull(Iterable<T> source) {
            return where(source, new Pre<T>() {
                @Override
                public boolean check(T t) {
                    return t != null;
                }
            });
        }
    
        public static <T> ArrayList<T> where(T[] ts, Pre<T> mapper) {
            return where(toList(ts), mapper);
        }
    
        public static <T> ArrayList<T> where(Iterable<T> source, Pre<T> mapper) {
            ArrayList<T> r = new ArrayList<T>();
            for (T t : source) {
                if (mapper.check(t)) {
                    r.add(t);
                }
            }
            return r;
        }
    
        public static <T> String toString(T[] source, Object s) {
            return toString(toList(source), s);
        }
    
        public static <T> String toString(T[] source, Object s, FuncT<T, String> mapper) {
            return toString(toList(source), s, mapper);
        }
    
        public static <T> String toString(Iterable<T> source, Object s) {
            return toString(source, s, null);
        }
    
        public static <T> String toString(Iterable<T> source, Object spliter, FuncT<T, String> mapper) {
            String s = spliter == null ? "" : spliter.toString();
            StringBuilder sb = new StringBuilder();
            for (T ti : source) {
                String str = mapper == null ? ti.toString() : mapper.get(ti);
                sb.append(str + s);
            }
            if (sb.length() > 0) {
                sb.setLength(sb.length() - s.length());
                return sb.toString();
            } else {
                return "";
            }
        }
    
        public static <T, TKey, TValue> HashMap<TKey, TValue> toHashMap(T[] ts, FuncT<T, Pair<TKey, TValue>> pair) {
            return toHashMap(toList(ts), pair);
        }
    
        public static <T, TKey, TValue> HashMap<TKey, TValue> toHashMap(Iterable<T> source, FuncT<T, Pair<TKey, TValue>> pair) {
            HashMap<TKey, TValue> r = new HashMap<TKey, TValue>();
            for (T t : source) {
                Pair<TKey, TValue> p = pair.get(t);
                r.put(p.getKey(), p.getValue());
            }
            return r;
        }
    
        public static <T> ArrayList<T> toList(Iterable<T> source) {
            ArrayList<T> r = new ArrayList<T>();
            for (T t : source) {
                r.add(t);
            }
            return r;
        }
    
        public static <T> ArrayList<T> toList(T[] ts) {
            ArrayList<T> r = new ArrayList<T>();
            for (T t : ts) {
                r.add(t);
            }
            return r;
        }
    
        public static <T> ArrayList<T> except(Iterable<T> it0, Iterable<T> it1) {
            ArrayList<T> r = new ArrayList<T>();
            for (T t : it0) {
                if (!r.contains(t)) {
                    r.add(t);
                }
            }
            for (int i = r.size() - 1; i > -1; i--) {
                T t = r.get(i);
                if (contains(it1, t)) {
                    r.remove(t);
                }
            }
            return r;
        }
    
        public static <T> ArrayList<T> union(Iterable<T> it0, Iterable<T> it1) {
            ArrayList<T> r = new ArrayList<T>();
            for (T t : it0) {
                if (!r.contains(t)) {
                    r.add(t);
                }
            }
            for (T t : it1) {
                if (!r.contains(t)) {
                    r.add(t);
                }
            }
            return r;
        }
    
        public static <T> ArrayList<T> intersect(Iterable<T> it0, Iterable<T> it1) {
            ArrayList<T> r = new ArrayList<T>();
            for (T t0 : it0) {
                for (T t1 : it1) {
                    if (t0 == null) {
                        if (t1 == null) {
                            if (!r.contains(t0)) {
                                r.add(t0);
                            }
                        }
                    } else {
                        if (t0.equals(t1)) {
                            if (!r.contains(t0)) {
                                r.add(t0);
                            }
                        }
                    }
                }
            }
            return r;
        }
    
        public static <T0, T1, TOut> ArrayList<TOut> intersect(Class<TOut> outCls, Iterable<T0> it0, Iterable<T1> it1, FuncT<T0, TOut> mapper0, FuncT<T1, TOut> mapper1) {
            ArrayList<TOut> r = new ArrayList<TOut>();
            for (T0 t0 : it0) {
                TOut t0out = mapper0.get(t0);
                for (T1 t1 : it1) {
                    TOut t1out = mapper1.get(t1);
                    if (t0out == null) {
                        if (t1out == null) {
                            if (!r.contains(t0out)) {
                                r.add(null);
                            }
                        }
                    } else {
                        if (t0out.equals(t1out)) {
                            if (!r.contains(t0out)) {
                                r.add(t0out);
                            }
                        }
                    }
                }
            }
            return r;
        }
    
        public static <T> boolean existsIn(T t, T... ts) {
            for (T t2 : ts) {
                if (t.equals(t2)) {
                    return true;
                }
            }
            return false;
        }
    
        public static <T> boolean contains(Iterable<T> source, T target) {
            for (T t : source) {
                if (t == null) {
                    if (target == null) {
                        return true;
                    }
                } else {
                    if (t.equals(target)) {
                        return true;
                    }
                }
            }
            return false;
        }
    
        public static <T> boolean any(Pre<T> pre, T t, T... ts) {
            if (pre.check(t)) {
                return true;
            }
            return any(toList(ts), pre);
        }
    
        public static <T> boolean any(T[] ts, Pre<T> pre) {
            return any(toList(ts), pre);
        }
    
        public static <T> boolean any(Iterable<T> source, Pre<T> pre) {
            for (T i : source) {
                if (pre.check(i)) {
                    return true;
                }
            }
            return false;
        }
    
        public static <T> ArrayList<T> sort(ArrayList<T> source, FuncT<T, Integer> mapper) {
            int[] indexes = sortIndexes(source, mapper);
            ArrayList<T> r = new ArrayList<T>();
            for (int i : indexes) {
                r.add(source.get(i));
            }
            return r;
        }
    
        public static <T> int[] sortIndexes(Iterable<T> source, FuncT<T, Integer> mapper) {
            ArrayList<Integer> ints = new ArrayList<Integer>();
            Iterator<T> it = source.iterator();
            while (it.hasNext()) {
                Integer integer = mapper.get(it.next());
                ints.add(integer);
            }
            int[] r = new int[ints.size()];
            for (int i = 0; i < r.length; i++) {
                r[i] = ints.get(i);
            }
            return sortIndexes(r);
        }
    
        public static <T> int[] sortIndexes(T[] source, FuncT<T, Integer> mapper) {
            int[] ints = new int[source.length];
            for (int i = 0; i < source.length; i++) {
                ints[i] = mapper.get(source[i]);
            }
            return sortIndexes(ints);
        }
    
        public static int[] sortIndexes(int[] source) {
            ArrayList<Integer> decre = new ArrayList<Integer>();
            for (int i : source) {
                decre.add(i);
            }
            ArrayList<Integer> incre = new ArrayList<Integer>();
            while (incre.size() < source.length) {
                int s = 0;
                int v = decre.get(0);
                for (int i = 1; i < decre.size(); i++) {
                    int e = decre.get(i);
                    if (e < v) {
                        s = i;
                        v = e;
                    }
                }
                decre.remove(s);
                for (int i = 0; i < source.length; i++) {
                    if (source[i] != v || incre.contains(i)) {
                        continue;
                    }
                    incre.add(i);
                    break;
                }
            }
            int[] r = new int[incre.size()];
            for (int i = 0; i < incre.size(); i++) {
                r[i] = incre.get(i);
            }
            return r;
        }
    
        public static <TIn, TOut> ArrayList<TOut> select(TIn[] source, FuncT<TIn, TOut> mapper) {
            return select(toList(source), mapper);
        }
    
        public static <TIn, TOut> ArrayList<TOut> select(Iterable<TIn> source, FuncT<TIn, TOut> mapper) {
            ArrayList<TOut> r = new ArrayList<TOut>();
            for (TIn ti : source) {
                r.add(mapper.get(ti));
            }
            return r;
        }
    }
  • 相关阅读:
    自定义异常
    异常处理
    以圆类 Circle 及立体图形类 Solid 为基础设计圆锥类 Cone
    以圆类 Circle 及立体图形类 Solid 为基础设计圆柱类 Cylinder
    《大道至简:软件工程实践者的思想》读后感
    以点类 Point 及平面图形类 Plane 为基础设计圆类 Circle
    以圆类 Circle 及立体图形类 Solid 为基础设计球类 Sphere
    以点类 Point 及平面图形类 Plane 为基础设计三角形类 Triangle
    设计并实现大数类 BigNum
    支付宝支付(三)—APP支付(alipay.trade.app.pay)
  • 原文地址:https://www.cnblogs.com/ly45/p/6240896.html
Copyright © 2011-2022 走看看