JAVA怎么取多个List集合的交集?

Python023

JAVA怎么取多个List集合的交集?,第1张

1、把多个list放到一个list中,生成 List<List<Object>>结构

2、遍历list,使用java8的规约操作,两两求交集

list.stream().reduce((list1,list2) ->{ list1.retainAll(list2)return list1}).orElse(emptyList())

public class DateKit{

    /**

                    时间段的比较处理 , 如果包含了传来的 时段 了, 就说明 时间冲突了 

    * @return 

    */

    public static boolean isContain(Date[] a, Date[] b) {

     

        long astatr = a[0].getTime()

        long aend   = a[1].getTime()

         

        long bstatr = b[0].getTime()

        long bend   = b[1].getTime()

         

        // a0 包在了 b0 ~ b1 之间

        if( astatr>=bstatr && astatr<=bend ) return true

         

        // b0 包在了 a0 ~ a1 之间

        if( astatr<=bstatr && aend>=bstatr ) return true

         

        return false

    }

     

    /**

                时间段的比较处理 , 如果包含了传来的 时段 了, 就说明 时间冲突了 , (允许首尾相等而不包含的情况)

    * @return 

    */

    public static boolean isContainEnd(Date[] a, Date[] b) {

     

        long astatr = a[0].getTime()

        long aend   = a[1].getTime()

         

        long bstatr = b[0].getTime()

        long bend   = b[1].getTime()

         

        // a0 包在了 b0 ~ b1 之间

        if( astatr>=bstatr && astatr<bend ) return true

         

        // b0 包在了 a0 ~ a1 之间

        if( astatr<=bstatr && aend>bstatr ) return true

         

        // 相等

        if( astatr==bstatr && aend==bend )  return true

         

        return false

    }

     

    // 功能 工具 扩展

     

        public static boolean isContain(String astatr,String aend, String bstatr,String bend) {

            return isContain(new String[]{astatr , aend}, new String[]{bstatr , bend})

        }

         

        public static boolean isContain(String[] aStr, String[] bStr) {

            return isContain(aStr, bStr, "yyyy-MM-dd HH:mm:ss")

        }

         

        public static boolean isContain(String[] aStr, String[] bStr, String pattern) {

            final SimpleDateFormat SF = new SimpleDateFormat(pattern)

            try {

                return isContain(new Date[]{SF.parse(aStr[0]), SF.parse(aStr[1])} , new Date[]{SF.parse(bStr[0]), SF.parse(bStr[1])})

            } catch (Exception e) {

                e.printStackTrace()

            }

            return false

        }

         

        public static boolean isContainEnd(String astatr,String aend, String bstatr,String bend) {

            return isContainEnd(new String[]{astatr , aend}, new String[]{bstatr , bend})

        }

         

        public static boolean isContainEnd(String[] aStr, String[] bStr) {

            return isContainEnd(aStr, bStr, "yyyy-MM-dd HH:mm:ss")

        }

         

        public static boolean isContainEnd(String[] aStr, String[] bStr, String pattern) {

            final SimpleDateFormat SF = new SimpleDateFormat(pattern)

            try {

                return isContainEnd(new Date[]{SF.parse(aStr[0]), SF.parse(aStr[1])} , new Date[]{SF.parse(bStr[0]), SF.parse(bStr[1])})

            } catch (Exception e) {

                e.printStackTrace()

            }

            return false

        }

     

} public static void main(String[] args) throws ParseException {        final SimpleDateFormat SF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

         

        Date[] a = {SF.parse("2017-07-06 11:53:00"), SF.parse("2017-07-06 14:52:00")}

        Date[] b = {SF.parse("2017-07-06 14:52:00"), SF.parse("2017-07-06 16:52:00")}

         

        System.out.println("您好, 智能的电脑! 请问:")

        for (Date date : a) {

            System.out.print(date.toString() + " ~  ")

        }

        System.out.println("包含:")

        for (Date date : b) {

            System.out.print(date.toString() + " ~  ")

        }

        System.out.println("吗?")

         

        boolean ret = DateKit.isContain(a, b)

        System.out.println("o(∩_∩)o 哈哈 ~ 我猜是: " + ret)

         

        ret = DateKit.isContainEnd(a, b)

        System.out.println("o(∩_∩)o 哈哈 ~ 允许首尾相等 我猜是: " + ret)

         

    }

分享~