- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一份员工
的列表。他们有 isActive
boolean 字段。我想将 employees
分成两个列表:activeEmployees
和 formerEmployees
。是否可以使用 Stream API?什么是最复杂的方法?
最佳答案
Map<Boolean, List<Employee>> partitioned =
listOfEmployees.stream().collect(
Collectors.partitioningBy(Employee::isActive));
生成的映射包含两个列表,对应于谓词是否匹配:
List<Employee> activeEmployees = partitioned.get(true);
List<Employee> formerEmployees = partitioned.get(false);
使用 partitioningBy
有几个原因在 groupingBy
(如 Juan Carlos Mendoza 所建议):
首先是groupingBy
的参数是 Function<Employee, Boolean>
(在这种情况下),因此有可能向它传递一个可以返回 null 的函数,
意味着如果该函数为任何员工返回 null,则将有第三个分区。
这将导致 partitioningBy
使用
Predicate<Employee>
,所以它只能返回 2 个分区。
NullPointerException
被收集器抛出:虽然没有明确记录,但会为空键显式抛出异常,大概是因为 Map.computeIfAbsent
的行为“如果函数返回 null,则不记录任何映射”,这意味着元素将从输出中静默删除。 (感谢 lczapski 指出这一点)。
其次,您在生成的 map 中使用 partitioningBy
获得两个列表 (*) ;与 groupingBy
,您只会获得元素映射到给定键的键/值对:
System.out.println(
Stream.empty().collect(Collectors.partitioningBy(a -> false)));
// Output: {false=[], true=[]}
System.out.println(
Stream.empty().collect(Collectors.groupingBy(a -> false)));
// Output: {}
(*) 此行为未记录在 Java 8 Javadoc 中, 但它是为 Java 9 添加的.
关于Java 流 : divide into two lists by boolean predicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46958023/
我使用 scipy.stats.spearmanr(a,b) 我得到: Warning: divide by zero encountered in divide 操作正确结束,但显示警告。 a 和
我使用 , 比如 .我认为使用 like 没问题.然而,有时不显示。 我用了在 ,但是 未显示。我应该只使用 吗?在 ? 如果有人遇到与我相同的问题,请分享您解决此问题的经验。 这是我的代码
I am trying to divide a very large even number 13144131834269512219260941993714669605006625743172006
我向 Mongo DB 创建了一个请求: { $project: { difference: { $subtract:
我有一个 JavaFX 应用程序 拆分 Pane .我想禁用 分隔线 在 拆分 Pane ,因此在应用程序运行时无法更改其位置。我怎样才能做到这一点? 最佳答案 没有 API,所以一旦显示了场景,我们
我尝试做一个简单的 Swing 窗,但布局并不容易...我的意思是我只想要一个有 3 个面板的窗口: 标题占窗口高度的 20% 内容占窗口高度的 60% 页脚占窗口高度的 20% 但我无法成功拥有我想
我尝试做一个简单的 Swing 窗,但布局并不容易...我的意思是我只想要一个有 3 个面板的窗口: 标题占窗口高度的 20% 内容占窗口高度的 60% 页脚占窗口高度的 20% 但我无法成功拥有我想
我正在尝试替换字符串中的字符。假设字符串是: "yaaaaaaaay:axaxaxaxa:yaaaaaaay" 我希望java将:之后的所有a更改为X,直到下一个:。所以它看起来像这样: "yaaaa
我在下面的代码中尝试 Perl 的 PDL: #!/usr/bin/perl -w use strict; use PDL::Core qw(pdl); use PDL::Math qw(isfin
这个问题已经有答案了: Is floating point math broken? (33 个回答) 已关闭 7 年前。 我在使用 BigDecimal 执行除法时得到不正确的结果。数字1 = 22
只是一个简单的问题,我无法理解,希望你们能帮忙。 我有一个div (带有 ID),单击时将打开一个新的 div - 很好,效果很好,我真正想要的是“填充”新的 div带有基于单击的 div ID 的预
我正在使用 BigDecimal 进行一些浮点运算。如果将 5 除以 4.2,您将得到一个异常(因为结果有一个不能用 BigDecimal 表示的非终止扩展) )即 BigDecimal five =
我的目标是获得类似于下图所示的分隔线: Goal Picture Divider 我需要在 LinearLayout 之间放置一个水平和垂直分隔线 这是我的用户界面 XML 代码:
我正在尝试以 Angular Testing 弹出组件,但我不知道为什么当我启动测试时出现错误: 'mat-divider' is not a known element: 1. If 'mat-di
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我知道 md-divider 用于 md-list 但我希望它在 flex-layout 中 例如: 应该在两个 div 之间有一个水平分隔线,对于另一种情况
当我尝试除以 0 时,以下代码没有捕获异常。我需要抛出异常,还是计算机会在运行时自动抛出异常? int i = 0; cin >> i; // what if someone enters zero
当我尝试除以 0 时,以下代码没有捕获异常。我需要抛出异常,还是计算机会在运行时自动抛出异常? int i = 0; cin >> i; // what if someone enters zero
这个问题在这里已经有了答案: Division by zero: Undefined Behavior or Implementation Defined in C and/or C++? (8 个
我的代码将以这种方式工作: input : a[]="create /dir/bar" 并保存在这个字符串中: b[]=create c[]=/dir/bar 还有一种情况是我保存了另外一个字符串:
我是一名优秀的程序员,十分优秀!