Questions tagged «java-stream»

将此标签用于与使用Stream API有关的问题。它是Java 8中引入的,支持对值流的功能样式操作,例如集合上的filter-map-reduce管道。

6
如何检查Java 8 Stream是否为空?
Stream作为非终端操作,我如何检查a 是否为空,如果不是则抛出异常? 基本上,我正在寻找与下面的代码等效的东西,但是没有在它们之间实现流。特别是,检查不应在终端操作实际消耗流之前进行。 public Stream<Thing> getFilteredThings() { Stream<Thing> stream = getThings().stream() .filter(Thing::isFoo) .filter(Thing::isBar); return nonEmptyStream(stream, () -> { throw new RuntimeException("No foo bar things available") }); } private static <T> Stream<T> nonEmptyStream(Stream<T> stream, Supplier<T> defaultValue) { List<T> list = stream.collect(Collectors.toList()); if (list.isEmpty()) list.add(defaultValue.get()); return list.stream(); }

15
Java 8 Stream与批处理
我有一个包含项目列表的大文件。 我想创建一批项目,并用这一批发出一个HTTP请求(所有项目都需要作为HTTP请求中的参数)。我可以使用for循环非常轻松地完成此操作,但是作为Java 8爱好者,我想尝试使用Java 8的Stream框架编写此代码(并获得延迟处理的好处)。 例: List<String> batch = new ArrayList<>(BATCH_SIZE); for (int i = 0; i < data.size(); i++) { batch.add(data.get(i)); if (batch.size() == BATCH_SIZE) process(batch); } if (batch.size() > 0) process(batch); 我想做一些事情 lazyFileStream.group(500).map(processBatch).collect(toList()) 最好的方法是什么?

6
在Java中使用stream.sorted()对列表进行排序
我有兴趣对流中的列表进行排序。这是我正在使用的代码: list.stream() .sorted((o1, o2)->o1.getItem().getValue().compareTo(o2.getItem().getValue())) .collect(Collectors.toList()); 我想念什么吗?列表未排序。 它应该根据具有最低值的项目对列表进行排序。 for (int i = 0; i < list.size(); i++) { System.out.println("list " + (i+1)); print(list, i); } 以及打印方法: public static void print(List<List> list, int i) { System.out.println(list.get(i).getItem().getValue()); }


5
从数组流传输时,为什么不能将整数映射到字符串?
这段代码有效(取自Javadoc): List<Integer> numbers = Arrays.asList(1, 2, 3, 4); String commaSeparatedNumbers = numbers.stream() .map(i -> i.toString()) .collect(Collectors.joining(", ")); 这是无法编译的: int[] numbers = {1, 2, 3, 4}; String commaSeparatedNumbers = Arrays.stream(numbers) .map((Integer i) -> i.toString()) .collect(Collectors.joining(", ")); IDEA告诉我,“ lambda表达式中的返回类型字符串不兼容”。 为什么呢 以及如何解决?

7
Java 8中findAny()和findFirst()之间的区别
Наэтотвопросестьответына堆栈溢出нарусском:Какиеразличиямежду的FindFirstивfindAny的Java 8? 我对Java 8中的 APIStream#findAny()和一点都不感到困惑。Stream#findFirst()Stream 我了解到的是,例如当与filter一起使用时,两者都会从流中返回第一个匹配的元素? 那么,为什么要用两种方法完成同一任务?我想念什么吗?

6
是否可以在<24的Android API上使用Java 8 Stream API?
我在这里读了这篇文章。但是我仍然无法在minSdkVersion &lt;24上运行包含以下Java 8 Stream API功能的代码。 List&lt;Car&gt; newCars = cars.stream() .filter(s -&gt; s.getColor().equals("red")) .collect(Collectors.toList()); 由于错误消息,此命令无法运行 调用需要API级别24(当前最小值为15):java.util.Collection#stream 那么有人知道解决方案吗?

5
如果findFirst()找到的第一个元素为null,为什么会抛出NullPointerException?
为什么这样抛出java.lang.NullPointerException? List&lt;String&gt; strings = new ArrayList&lt;&gt;(); strings.add(null); strings.add("test"); String firstString = strings.stream() .findFirst() // Exception thrown here .orElse("StringWhenListIsEmpty"); //.orElse(null); // Changing the `orElse()` to avoid ambiguity 中的第一项strings是null,这是一个完全可以接受的值。此外,findFirst()返回Optional,这对于findFirst()能够处理nulls更有意义。 编辑:更新了orElse()以减少歧义。

5
我们应该如何管理jdk8流中的空值
Java开发人员大家好, 我知道这个主题可能有点,in advance因为JDK8尚未发布(无论如何现在还没有。),但是我正在阅读一些有关Lambda表达式的文章,尤其是与与称为Stream的新集合API相关的部分。 这是《Java杂志》文章中给出的示例(这是一种水獭种群算法。): Set&lt;Otter&gt; otters = getOtters(); System.out.println(otters.stream() .filter(o -&gt; !o.isWild()) .map(o -&gt; o.getKeeper()) .filter(k -&gt; k.isFemale()) .into(new ArrayList&lt;&gt;()) .size()); 我的问题是,如果在Set内部迭代的中间,水獭之一为null,会发生什么情况? 我希望抛出NullPointerException,但也许我还是停留在以前的开发范例(非功能性)中,有人可以启发我,因为应该如何处理? 如果这确实引发了NullPointerException,则我认为该功能非常危险,必须仅按以下方式使用: 开发人员确保没有null值(也许使用以前的.filter(o-&gt; o!= null)) 开发人员确保应用程序永远不会生成空水獭或特殊的NullOtter对象来处理。 最佳选择是什么,或其他任何选择? 谢谢!

4
不带“ isPresent()”检查的“ Optional.get()”
我在Java中有以下搜索代码: return getTableViewController().getMe().getColumns().stream().filter($-&gt;Database.equalsColumnName($.getId(), columnId)).findFirst().get(); 我希望按名称查找列并返回找到的第一个。 我了解在某些情况下什么也找不到,应该对其进行处理,但是如何处理呢? 这是这个咒骂所要的: 'Optional.get()' without 'isPresent()' check ? 怎么修?null如果没有发现,我希望返回。 更新 好吧,好吧,我只是没有意识到,那又findFirst()回来了Optional。

12
Java 8 Lambda从列表中获取和删除元素
鉴于元素的列表,我想用一个给定的属性来获取元素,并从列表中删除。我发现的最佳解决方案是: ProducerDTO p = producersProcedureActive .stream() .filter(producer -&gt; producer.getPod().equals(pod)) .findFirst() .get(); producersProcedureActive.remove(p); 是否可以在lambda表达式中组合get和remove?


14
Java 8,流查找重复元素
我试图列出整数列表中的重复元素,例如 List&lt;Integer&gt; numbers = Arrays.asList(new Integer[]{1,2,1,3,4,4}); 使用jdk 8的流。有人尝试过吗?要删除重复项,我们可以使用distinct()api。但是,找到重复的元素呢?有人可以帮我吗?

3
为什么在静态初始化程序中使用lambda进行并行流会导致死锁?
我遇到了一个奇怪的情况,在静态初始化程序中使用带有lambda的并行流似乎永远没有CPU使用率。这是代码: class Deadlock { static { IntStream.range(0, 10000).parallel().map(i -&gt; i).count(); System.out.println("done"); } public static void main(final String[] args) {} } 这似乎是此行为的最小再现测试用例。如果我: 将块放入main方法而不是静态初始化程序中, 删除并行化,或 删除lambda, 代码立即完成。谁能解释这种行为?它是错误还是故意的? 我正在使用1.8.0_66-内部的OpenJDK版本。

3
Java 8 Stream中的forEach vs forEachOrdered
我知道这些方法的执行顺序不同,但是在我所有的测试中,我无法实现不同的执行顺序。 例: System.out.println("forEach Demo"); Stream.of("AAA","BBB","CCC").forEach(s-&gt;System.out.println("Output:"+s)); System.out.println("forEachOrdered Demo"); Stream.of("AAA","BBB","CCC").forEachOrdered(s-&gt;System.out.println("Output:"+s)); 输出: forEach Demo Output:AAA Output:BBB Output:CCC forEachOrdered Demo Output:AAA Output:BBB Output:CCC 请提供示例,说明两种方法将产生不同的输出。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.