从Java 8中的方法返回列表?
发布时间:2020-12-15 04:50:05 所属栏目:Java 来源:网络整理
导读:我有以下方法(见下文).代码正在运行,但我得到了很多重复,我应该使用IntStream. 你能指定一下如何更好地优化代码吗?提前致谢. public static ListInteger oddOrEven(ListInteger integers) { long sum = integers.stream().mapToInt(i -i).summaryStatistics
我有以下方法(见下文).代码正在运行,但我得到了很多重复,我应该使用IntStream.
你能指定一下如何更好地优化代码吗?提前致谢. public static List<Integer> oddOrEven(List<Integer> integers) { long sum = integers.stream().mapToInt(i ->i).summaryStatistics().getSum(); if (sum % 2 == 0) { return integers.stream().filter(x -> x % 2==0).distinct().collect(Collectors.toList()); } else if (sum % 2 != 0) { return integers.stream().filter(x -> x % 2 != 0).distinct().collect(Collectors.toList()); } return null; } 解决方法
看起来你只需要元素的总和来检查它是奇数还是偶数.要知道这一点,就足以检查奇数元素的数量是奇数还是偶数.
您可以将输入拆分为奇数和偶数列表,并根据奇数列表的大小决定返回哪一个: public static List<Integer> oddOrEven(List<Integer> integers) { Map<Boolean,List<Integer>> oddsAndEvens = integers.stream() .collect(Collectors.partitioningBy(i->i%2==0)); return oddsAndEvens.get(false).size() % 2 == 0 ? // check if there's an even number of odd // elements,which means the sum is even oddsAndEvens.get(true) : // return the even elements oddsAndEvens.get(false); // return the odd elements } 测试: System.out.println (oddOrEven(Arrays.asList (1,2,3,4,5))); System.out.println (oddOrEven(Arrays.asList (1,5,3))); 输出: [1,5] [2,4] 编辑: 在我的原始答案中,我错过了distinct()步骤,应该在我们决定是否返回奇数或偶数元素之后执行.我担心这需要添加第二个Stream管道: public static List<Integer> oddOrEven(List<Integer> integers) { Map<Boolean,List<Integer>> oddsAndEvens = integers.stream() .collect(Collectors.partitioningBy(i->i%2==0)); return oddsAndEvens.get(false).size() % 2 == 0 ? oddsAndEvens.get(true).stream().distinct().collect(Collectors.toList()) : oddsAndEvens.get(false).stream().distinct().collect(Collectors.toList()); } 或(根据霍尔格的建议): public static List<Integer> oddOrEven(List<Integer> integers) { Map<Boolean,List<Integer>> oddsAndEvens = integers.stream() .collect(Collectors.partitioningBy(i->i%2==0)); return oddsAndEvens.get(oddsAndEvens.get(false).size() % 2 == 0) .stream() .distinct() .collect(Collectors.toList()); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |