标签: java-stream

如何在Java中创建空流?

在C#中我会使用Enumerable.Empty(),但是如何Stream在Java中创建一个空?

java enumerable java-stream

48
推荐指数
2
解决办法
2万
查看次数

流式传输到新集合的集合

我正在寻找最无痛的方法来过滤集合.我在想类似的东西

Collection<?> foo = existingCollection.stream().filter( ... ). ...
Run Code Online (Sandbox Code Playgroud)

但我不确定如何最好从过滤器,返回或填充另一个集合.大多数例子似乎都像"在这里你可以打印".可能有一个我缺少的构造函数或输出方法.

java java-8 java-stream

47
推荐指数
2
解决办法
5万
查看次数

为什么java.util.Collection没有实现新的Stream接口?

我花了一些时间开始研究关于流和lambdas的java-8嗡嗡声.让我吃惊的是,你不能应用流操作,例如.map(),.filter()直接上java.util.Collection.是否存在技术原因导致java.util.Collection接口未通过这些Stream操作的默认实现进行扩展?

谷歌搜索了一下,我看到很多人按照以下模式编码的例子:

List<String> list = someListExpression;
List<String> anotherList = list.stream().map(x -> f(x)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

如果你的代码中有很多这些流操作,那就变得非常笨拙了.由于.stream()并且.collect()与您想表达的内容完全无关,您宁愿说:

List<String> list = someListExpression;
List<String> anotherList = list.map(x -> f(x));
Run Code Online (Sandbox Code Playgroud)

java lambda functional-programming java-8 java-stream

47
推荐指数
1
解决办法
3445
查看次数

为什么共享可变性不好?

我正在观看关于Java的演讲,有一次,讲师说:

"可变性是可以的,分享是好的,共享的可变性是魔鬼的工作."

他所指的是以下一段代码,他认为这是一种"极其糟糕的习惯":

//double the even values and put that into a list.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 1, 2, 3, 4, 5);
List<Integer> doubleOfEven = new ArrayList<>();

numbers.stream()
       .filter(e -> e % 2 == 0)
       .map(e -> e * 2)
       .forEach(e -> doubleOfEven.add(e));
Run Code Online (Sandbox Code Playgroud)

然后他继续编写应该使用的代码,即:

List<Integer> doubleOfEven2 =
      numbers.stream()
             .filter(e -> e % 2 == 0)
             .map(e -> e * 2)
             .collect(toList());
Run Code Online (Sandbox Code Playgroud)

我不明白为什么第一段代码是"坏习惯".对我而言,他们都达到了同样的目标.

java immutability java-8 java-stream

46
推荐指数
3
解决办法
4580
查看次数

如何在流式传输时删除HashMap的元素(lambda)

我有以下情况需要从流中删除元素.

map.entrySet().stream().filter(t -> t.getValue().equals("0")).
            forEach(t -> map.remove(t.getKey()));
Run Code Online (Sandbox Code Playgroud)

在Java 8之前的代码中,可以从迭代器中删除 - 在这里处理这种情况的最佳方法是什么?

java dictionary iterator java-stream

45
推荐指数
2
解决办法
3万
查看次数

如何检查Java 8 Streams中是否存在任何重复?

在java 8中,检查List是否包含任何重复的最佳方法是什么?

我的想法是这样的:

list.size() != list.stream().distinct().count()
Run Code Online (Sandbox Code Playgroud)

这是最好的方式吗?

java duplicates java-8 java-stream

45
推荐指数
3
解决办法
4万
查看次数

Iterator与Java的流8

为了利用java.util.streamJdk 8中包含的各种查询方法,我尝试设计域模型,其中具有*多重性(具有零个或多个实例)的关系的getter 返回a Stream<T>而不是Iterable<T>or Iterator<T>.

我怀疑的是,与此Stream<T>相比,Iterator<T>是否会产生任何额外的开销?

那么,使用Stream<T>?来破坏我的域模型是否有任何不利之处?

或者,我应该总是返回一个Iterator<T>或者Iterable<T>,并通过将该迭代器转换为StreamUtils?来让最终用户决定是否使用流.

请注意,返回a Collection不是有效选项,因为在这种情况下,大多数关系都是惰性且大小未知.

java domain-driven-design domain-model java-8 java-stream

45
推荐指数
2
解决办法
2万
查看次数

在Java 8中反转比较器

我有一个ArrayList,并希望按降序排序.我用它来做法java.util.stream.Stream.sorted(Comparator).这是根据Java API的描述:

返回由此流的元素组成的流,并根据提供的内容进行排序Comparator.

这个方法给我一个升序排序.我应该更改哪个参数,只是为了降序?

java sorting comparator java-8 java-stream

44
推荐指数
4
解决办法
7万
查看次数

Java 8 Stream API用于查找与属性值匹配的唯一对象

使用Java 8 Stream从Collection中查找与Property值匹配的对象.

List<Person> objects = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

人员属性 - >姓名,电话,电子邮件.

迭代人员列表并找到匹配电子邮件的对象.看到这可以通过Java 8流轻松完成.但那还会收回一个系列吗?

例如:

List<Person> matchingObjects = objects.stream.
    filter(p -> p.email().equals("testemail")).
    collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但我知道它总会有一个独特的对象.我们可以做一些事情,而不是Collectors.toList直接得到实际的对象.而不是获取对象列表.

java filter java-8 java-stream

44
推荐指数
3
解决办法
8万
查看次数

是否允许/建议重用收集器?

我的代码中有很多地方可以:

someStream.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

其中,Collectors.toList()创建于每次使用一个新的收藏家.

这引出了一个问题:是否允许和建议做以下事情:

private final static Collector<…> TO_LIST = Collectors.toList()
Run Code Online (Sandbox Code Playgroud)

对于我使用的每种类型,然后使用单个收集器,如:

someStream.collect(TO_LIST)
Run Code Online (Sandbox Code Playgroud)

当需要收藏家时

由于收藏家是无国籍的,只是一系列功能和特征,我认为它应该有效,但OTOH,每次通话都会Collectors.toList()创造一个新的CollectorImpl<>.

重用收集器的缺点是什么?

java collections java-8 java-stream

44
推荐指数
4
解决办法
2944
查看次数