我有个人课:
@Data
public class Person {
private Integer id;
private String status;
}
我有一个叫personList的人的名单:
[{
"id": null,
"status": "inactive"
},
{
"id": 2,
"status": "inactive"
},
{
"id": null,
"status": "active"
}]
现在我需要找到所有状态为“不活跃”的人,不管这个人是否有身份证。如果一个人没有身份证,但状态为“活跃”,也包括那个人。我正在使用Java流进行过滤:
List<Person> inactivePersonList =
personList.stream()
.filter(person -> person.getStatus().equals("inactive"))
.filter(person -> person.getId() == null && person.getStatus().equals("active"))
.collect(Collectors.toList());
流式传输后的结果是没有人被选中。第一个人没有被选中是因为它没有通过第二个过滤器,最后一个人没有被选中是因为它没有通过第一个过滤器。
我想我可以通过使用OR
将两个过滤器合并成一个来修复它,但是我正在努力使每个过滤器变得简单,所以在我做出改变之前,我想问一下是否有更好的方法来做到这一点。谢谢。
使用一个筛选器,但向用户添加一个方法,例如isActive()
:
@Data
public class Person {
private Integer id;
private String status;
public boolean isActive() {
return status.equals("active") || id != null;
}
}
你最好改变区分活跃用户的方式。如果用户处于“活动”状态,但同时未处于活动状态,则说明您的类设计出了问题。
您可能希望使用枚举状态{INACTIVE,ACTIVE}
而不是字符串。
或者使用另一种方法isUnknown
,使过滤器更清晰。对所有人进行多次迭代似乎不是一个好主意。
过滤器是添加剂。它们实际上是
List<Person> inactivePersonList =
personList.stream()
.filter(p -> p.getStatus().equals("inactive") ||
p.getId() == null && p.getStatus().equals("active"))
.collect(Collectors.toList());
如果你有独立的
谓词
对象,你可以。或者()
将它们放在一起。
Predicate<Person> inactive = p -> p.getStatus().equals("inactive");
Predicate<Person> activeUnknown = p -> p.getId() == null && p.getStatus().equals("active");
List<Person> inactivePersonList =
personList.stream()
.filter(inactive.or(activeUnknown))
.collect(Collectors.toList());
甚至:
Predicate<Person> inactive = p -> p.getStatus().equals("inactive");
Predicate<Person> unknown = p -> p.getId() == null;
Predicate<Person> active = p -> p.getStatus().equals("active");
List<Person> inactivePersonList =
personList.stream()
.filter(inactive.or(unknown.and(active)))
.collect(Collectors.toList());
我正在使用普罗米修斯和格拉法纳,我正在试图跟踪一个web服务器应用程序。 我想以毫秒为单位绘制特定查询的平均持续时间。我想我可以从下面的数据到那里,但我在挣扎。 我的两组值: 但是分母可以有不同的返回码,所以我必须求和,我需要做一些忽略或on之类的事情,但我还没有找到一个例子来帮助我,我对此非常陌生。 有人吗?
我有一个Kafka Streams拓扑,其中我加入了5个表,每个表都是在一个主题上创建的,该主题由一些Kafka连接器填充,这些连接器产生KeyValue事件,其中Key是针对相同的Avro模式产生的,但在我的拓扑中,当我加入这些表时,Key似乎不一样,如果它们是Java等于事件。所有这些背后的原因是什么? 它与Confluent Schema Registry集成。 我们已经使用了调试器,并且在
我有一个算法,在一些不同的字符串之间给我一个分数。我的想法是:如果两个字符串之间的分数高于0'80,那么这两个字符串将被认为是相同的,当我应用keyby(“name”)时,那些相似的字符串将被键入,因为它们具有完全相同的名称。 直观示例: DataStream1-----约翰·洛克,米奇·米克,威尔·威廉姆斯 希望你能理解,谢谢!
问题内容: 我今天在另一个问题中提出了这个问题,但是 由于措辞的方式,恐怕无法解决任何问题。 我有一个json输入,其中包含以下数据: 杰森 如您所见,option_value项是一个对象中的Array和 另一个对象中的简单字符串。 我怎样才能让Gson正确处理呢?我的类将此描述为 List对象,因此它适用于option_value是 数组的前几个项目,但是当它成为字符串时,应用程序崩溃,并且我收
null 或用java
我有一张清单: 我想有这样的结果: