我有一个需求,要获取员工姓名包含“kumar”且年龄大于26岁的人数。我正在使用Java 8流迭代集合,并且能够找到符合上述条件的员工数量。
但是,在此期间,我需要打印员工详细信息。
这是我使用Java 8流的代码:
但是,在此期间,我需要打印员工详细信息。
这是我使用Java 8流的代码:
public static void main(String[] args) {
List<Employee> empList = new ArrayList<>();
empList.add(new Employee("john kumar", 25));
empList.add(new Employee("raja", 28));
empList.add(new Employee("hari kumar", 30));
long count = empList.stream().filter(e -> e.getName().contains("kumar"))
.filter(e -> e.getAge() > 26).count();
System.out.println(count);
}
传统方式:
public static void main(String[] args){
List<Employee> empList = new ArrayList<>();
empList.add(new Employee("john kumar", 25));
empList.add(new Employee("raja", 28));
empList.add(new Employee("hari kumar", 30));
int count = 0;
for (Employee employee : empList) {
if(employee.getName().contains("kumar")){
if(employee.getAge() > 26)
{
System.out.println("emp details :: " + employee.toString());
count++;
}
}
}
System.out.println(count);
}
我希望能够使用流来实现与传统方式相同的打印操作。
当使用流时,如何在每次迭代中打印一条消息?
peek
只对 已处理 的项执行操作,因此如果使用短路终端操作(如findFirst
),则不一定会处理所有项。此外,如果大小可预测(例如没有filter
),则count()
可能会完全跳过处理。Java 9的实现具有这种优化... - Holgerpeek
,而是使用一个日志框架,在开发和生产环境下记录不同的日志(基于配置文件)。看一下log4j
。 - Tunaki.peek(() -> logger.debug("Message"))
这样的事情,那么定义/使用的接口会知道为你调用 logger.isEnabled,你就不需要担心它了。请参见《Java 8 Lambdas》书的第42页。 - djangofan.peek(() -> {doSomething();})
。 - ihebiheb