当前位置: 首页 > 知识库问答 >
问题:

使用流找到Max

濮冠宇
2023-03-14

以下是尝试用流查找Max的推荐方法吗?

List<Employee> emps = new ArrayList<>();
emps.add(new Employee("Roy1",32));
emps.add(new Employee("Roy2",12));
emps.add(new Employee("Roy3",22));
emps.add(new Employee("Roy4",42));
emps.add(new Employee("Roy5",52));

Integer maxSal= emps.stream().mapToInt(e -> e.getSalary()).reduce((a,b)->Math.max(a, b));
System.out.println("Max " + maxSal);

它会导致编译错误-这是什么意思?

error: incompatible types: OptionalInt cannot be
nverted to Integer
                  Integer maxSal= emps.stream().mapToInt(e -> e.getSalary()).
uce((a,b)->Math.max(a, b));

共有3个答案

寿翰飞
2023-03-14

在回答您的问题时,问题是<code>reduce</code>方法将返回<code>optionant</code>所以您需要调用<code>。如果您想要整数值,请使用getAsInt()方法。

    Integer maxSal = emps.stream().mapToInt(e -> e.getSalary())
         .reduce((a,b)->Math.max(a, b)).getAsInt();

如果列表中没有最大值,您将得到一个需要处理的< code > NoSuchElementException 。

张丁雷
2023-03-14

首先,你可以用Arrays.asList(T...) 缩短你的 emps 初始化,比如

List<Employee> emps = Arrays.asList(new Employee("Roy1", 32), 
        new Employee("Roy2", 12), new Employee("Roy3", 22),
        new Employee("Roy4", 42), new Employee("Roy5", 52));

接下来,您可以使用<code>optionant.orelsetrow(供应商

int maxSal = emps.stream().mapToInt(Employee::getSalary).max()
        .orElseThrow(() -> new RuntimeException("No Such Element"));
System.out.println("Max " + maxSal);

最后,您还可以推断没有人会接受负工资,并使用orElse(int)

int maxSal = emps.stream().mapToInt(Employee::getSalary).max().orElse(-1);
System.out.println("Max " + maxSal);
西门骁
2023-03-14

您可以使用<code>Integer方法。在reduce中的min返回<code>optionant,可用于获取<code>Int(确保边界检查)

使用< code>IntStream

int max1 = emps.stream().mapToInt(Employee::getSalary).max().getAsInt();

使用<code>IntSummaryStatistics[如果您对统计感兴趣,如最小值、最大值、平均值]

IntSummaryStatistics stats = emps.stream().mapToInt(Employee::getSalary).summaryStatistics();
int max2 = stats.getMax();

减少函数

int max3 = emps.stream().mapToInt(Employee::getSalary).reduce(Integer::min).getAsInt();
 类似资料:
  • 问题内容: 我在PostgreSQL表中有一堆文本行,我正在尝试查找常见的字符串。 例如,假设我有一个基本表,例如: 我正在尝试在所有行中以及所有行中找到流行的字符串(目标是显示“趋势”字符串之类的列表,例如Twitter“趋势”之王) 我使用全文搜索,并且尝试结合使用,但是结果令人失望。 有什么想法吗?谢谢! 问题答案: 没有现成的Posgres文本搜索功能可以找到最受欢迎的短语。对于两个单词的

  • 有没有一种简单的方法来使用Java8流来实现这一点呢?例如,给定上面的数组和谓词将result设置为“2”。 如果可以获得下一个值,那么在匹配另一个谓词(如)之前,还可以获得下一个N个值或所有值的列表/数组。

  • 我想在找到第一个值时终止流的执行。然而,当我运行下面的代码时,它显示,即使第一个方法中存在值,也会调用两个方法。 我登记了文件: 表示 如果存在值,则返回{@code true},否则返回{@code false}。 返回描述此流的第一个元素的{@link Optional},如果流为空,则返回空的{@code Optional}。如果流没有遭遇顺序,那么可以返回任何元素。 所以它满足了第一个条件

  • 问题内容: 我创建了一个简单的服务器,该服务器使用fs模块将mp3文件流式传输到浏览器,并以html5音频元素播放该文件。实际上,音频流非常好,但是,即使我要搜索的部分已经被缓冲,我也无法在音频流中进行搜索。 其他类似的问答也建议添加Content-Range标头,但我找不到如何做到这一点的简单示例。其他人则说使用206 Partial-Content标头,但是当我这样做时,音频将根本无法播放。

  • 我重新安装在我的本地机器上不成功。起初,我下载了《流浪狗》,安装并运行良好,但决定卸载它。我的卸载如下: 通过运行检查,我找不到它,这意味着它已成功卸载。 要重新安装它,我执行以下步骤,但我不断收到消息 : 安装流浪者:选项1 这是我得到的结果: 正在阅读软件包列表。。。已完成构建依赖关系树 读取状态信息。。。Done vagrant已经是最新版本(1:2.2.10). 以下软件包已自动安装,不再