gpt4 book ai didi

java - 从中间结果初始化变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:50:33 25 4
gpt4 key购买 nike

有时,当源代码变得复杂时,我发现阅读这样的语句会让人感到困惑:

Set<Integer> odds = new HashSet<>(ints); // not yet true
odds.removeAll(evens); // now it's true

我想知道是否有一种聪明的方法可以避免 odds 也包含偶数的行。类似这样的东西:

(Set<Integer> odds = new HashSet<>(ints)).removeAll(evens); // doesn't compile

我可以使用双括号初始化,

Set<Integer> odds = new HashSet<Integer>(ints) {{ removeAll(evens); }};

但这显然很糟糕for multiple reasons .

这是另一个编译的示例 hack,但它看起来更像是一个笑话:

Set<Integer> odds = (odds = new HashSet<>(ints)).retainAll(evens) ? odds : odds

我想到的最后一个(在写这篇文章时)似乎还可以,尽管它使用两行:

Set<Integer> odds;
(odds = new HashSet<Integer>(ints)).removeAll(evens);

还有其他想法吗?

最佳答案

使用流:

Set<Integer> odds =
ints.stream().filter(x -> x % 2 == 1).collect(Collectors.toSet());

如果您想同时将集合划分为奇数和偶数:

Map<Boolean, Set<Integer>> oddsAndEvens =
ints.stream().collect(
Collectors.partitioningBy(x -> x % 2 == 0, Collectors.toSet()));
Set<Integer> evens = oddsAndEvens.get(true);
Set<Integer> odds = oddsAndEvens.get(false);

关于java - 从中间结果初始化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43763553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com