java - 如何从流中仅提取一个允许的元素?

标签 java java-stream

我有一个元素列表,想提取字段属性的值。
问题:所有元素都应该具有相同的属性值。

我可以做得比以下更好或更优雅吗?

Set<String> matches = fields.stream().map(f -> f.getField()).collect(Collectors.toSet());
if (matches.size() != 1) throw new IllegalArgumentException("could not match one exact element");
String distrinctVal = matches.iterator().next(); //continue to use the value

这是否可以直接使用流方法,例如使用 reduce ?

最佳答案

您当前的解决方案很好。您也可以尝试这种方式来避免收集。

使用 distinct()然后 count()

if (fields.stream().map(f -> f.getField()).distinct().count() != 1) 
      throw new IllegalArgumentException("could not match one exact element");

获取值(value)
String distrinctVal = fields.get(0).getField();

关于java - 如何从流中仅提取一个允许的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62002153/

相关文章:

java - SAXParseException - 解析 soap 响应时

java - 从上到下打印整数的 ArrayList 并将每个元素作为字符串返回

java - 使用 JPA 创建对象并将其保存到表中,但将表名称作为参数

java - 为什么 java Stream.sorted() 给出不同的结果?

java - 通过 Java 中的元素串联合并字符串列表

java - 计算列表中日期之间的时间

java - Java 程序中的 Unicode 转义行为

java - 在交互式命令模式下使用 apache exec

java-8 - Java 8 流和 RxJava 可观察量之间的区别

java - 在 Java 中实现数据透视表