作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何制作人员列表,如果所有人员的工资总额超过 5000(例如),或者如果总工资将小于返回空列表
我尝试使用 java.util.Collection.stream()
public static List<Person> filterPositions (List<Person> persons, Predicate<Person> predicate) {
return positions.stream().filter(predicate).collect(
Collectors.collectingAndThen(Collectors.summingInt( ...
但我不知道如何继续这段代码
最佳答案
也许你想得太复杂了……
public static List<Person> filterPositions(
List<Person> persons, Predicate<Person> predicate) {
return persons.stream().filter(predicate).mapToInt(Person::getSalary).sum() > 5000?
persons: Collections.emptyList();
}
如果您想返回过滤列表,您可以使用:
public static List<Person> filterPositions(
List<Person> persons, Predicate<Person> predicate) {
return persons.stream().filter(predicate).mapToInt(Person::getSalary).sum() > 5000?
persons.stream().filter(predicate).collect(Collectors.toList()):
Collections.emptyList();
}
或
public static List<Person> filterPositions(
List<Person> persons, Predicate<Person> predicate) {
persons = persons.stream().filter(predicate).collect(Collectors.toList());
return persons.stream().mapToInt(Person::getSalary).sum() > 5000?
persons: Collections.emptyList();
}
任一变体都有优势,具体取决于条件是否为真。虽然第一变型在不是的情况下省略了收集操作,但是第二变型在是的情况下省略了第二过滤操作。因此,偏好取决于条件为真的可能性。或者过滤器有多贵,或者结果列表预计有多大。
<小时/>如果允许您修改传入列表,则会出现完全不同的选项:
/** modifies {@code persons} list. */
public static void filterPositions(
List<Person> persons, Predicate<Person> predicate) {
persons.removeIf(predicate.negate());
if(persons.stream().mapToInt(Person::getSalary).sum() <= 5000)
persons.clear();
}
关于java - 如果所有人的工资总额超过...,如何制作职位列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33017060/
这是电话面试中提出的第一个问题? 员工表有 ID、姓名、薪水、部门列。给我按部门列出的最高工资。 我的答案:按部门从员工组中选择最高(薪水)、部门。 后续问题:现在,在上面的查询中,我只想获取平均工资
当我编译它时,我收到错误,操作符号有问题,行代码错误: Pay = (40 * Rate) + (( Hours - 40) * (1.5 * Rate)); 下面是我使用的完整代码。 import
我是一名优秀的程序员,十分优秀!