Tag: java stream

Java 8流将映射到List

鉴于我有一些函数需要两个参数并返回一个值,是否可以将Map转换为Stream中的List作为非终端操作? 最近的I cam找到的是在地图上使用forEach来创建实例并将它们添加到预定义的List中,然后从该List开始一个新的Stream。 或者我只是错过了什么? 例如:经典“在一些长词中找到3个最常出现的单词” wordList.stream().collect(groupingBy(Function.identity, Collectors.counting))). (现在我想流式传输那个地图的entrySet) sorted((a,b) -> a.getValue().compareTo(b.getValue))).limit(3).forEach(print…

用于Guava不可变集合的Java 8收集器?

我非常喜欢Java 8流和Guava的不可变集合,但我无法弄清楚如何将两者结合使用。 例如,如何实现将流结果收集到ImmutableMultimap中的Java 8 Collector ? 加分点:我希望能够提供键/值映射器,类似于Collectors.toMap()的工作方式。

如何使用流外部的值使用Java流API创建映射?

我想初始化一个Map并希望始终从流外部添加相同的BigDecimal值。 BigDecimal samePrice; Set set; set.stream().collect(Collectors.toMap(Function.identity(), samePrice)); 但是Java抱怨如下: 收集器类型中的Map(Function,Function)方法不适用于参数(Function,BigDecimal) 为什么我不能从外面使用BigDecimal? 如果我写: set.stream().collect(Collectors.toMap(Function.identity(), new BigDecimal())); 它会起作用,但那当然不是我想要的。

Java 8 Stream – 如何返回用要查找的项列表替换字符串内容

我希望使用java8 .stream()或.foreach()替换下面的代码。 但是我这样做有困难。 它可能很容易,但我找到了思考斗争的function方式:) 我可以迭代,没问题,但由于可变性问题而返回修改后的字符串是问题。 有人有主意吗 ? List toRemove = Arrays.asList(“1”, “2”, “3”); String text = “Hello 1 2 3”; for(String item : toRemove){ text = text.replaceAll(item,EMPTY); } 谢谢 !

如何使用java 8 stream和lambda来flatMap一个groupingBy结果

我有一个包含其他对象列表的对象,我想返回由容器的某些属性映射的包含对象的平面图。 任何一个如果可能只使用流和lambdas? public class Selling{ String clientName; double total; List products; } public class Product{ String name; String value; } 让我们来处理一系列操作: List operations = new ArrayList(); operations.stream() .filter(s -> s.getTotal > 10) .collect(groupingBy(Selling::getClientName, mapping(Selling::getProducts, toList()); 结果将是善意的 Map<String, List<List>> 但我想像它一样扁平化 Map<String, List>

如何在java流中按降序排序LinkedHashMap?

要按升序对其进行排序,我可以使用: myMap.entrySet().stream() .sorted(Map.Entry.comparingByValue()) .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); 我怎么能按降序排列呢?

是否可以将.flatMap()或.collect()均匀分布在多个集合中

例如,有[1,2,3,4,5] , [6,7,8] , [9,0] 。 有没有办法避免循环使用迭代器通过Java 8流API交错这些集合以获得以下结果 – [1,6,9,2,7,0,3,8,4,5] ?

Java Stream API – 计算嵌套列表的项目

假设我们有一个国家List列表: List并且每个国家/地区都有对其区域列表的引用: List (例如,美国的情况)。 像这样的东西: USA Alabama Alaska Arizona … Germany Baden-Württemberg Bavaria Brandenburg … 在“普通的”Java中,我们可以计算所有区域,例如: List countries = … int regionsCount = 0; for (Country country : countries) { if (country.getRegions() != null) { regionsCount += country.getRegions().size(); } } 是否有可能通过Java 8 Stream API实现相同的目标? 我想到了类似的东西,但我不知道如何使用流API的count()方法count()嵌套列表的项目: countries.stream().filter(country -> country.getRegions() != null).???

如何使用java8通过谓词对列表进行分区?

我有一个列表,我想分成几个小清单。 说出包含“aaa”的所有项目,包含“bbb”和更多谓词的所有内容。 我怎么能用java8这样做? 我看到这篇文章,但它只分成两个列表。 public void partition_list_java8() { Predicate startWithS = p -> p.toLowerCase().startsWith(“s”); Map<Boolean, List> decisionsByS = playerDecisions.stream() .collect(Collectors.partitioningBy(startWithS)); logger.info(decisionsByS); assertTrue(decisionsByS.get(Boolean.TRUE).size() == 3); } 我看过这篇文章 ,但它在Java 8之前很老了。

哪里定义了收集器(供应商,累加器,合并器)的组合顺序?

Java API文档声明collect方法的combiner参数必须是: 用于组合两个值的关联,非干扰,无状态函数,它必须与累加器函数兼容 combiner是BiConsumer ,它接收R类型的两个参数并返回void 。 但是文档没有说明我们是否应该将元素组合到第一个或第二个参数中? 例如,以下示例可以给出不同的结果,这取决于组合的顺序为: m1.addAll(m2)或m2.addAll(m1) 。 List res = LongStream .rangeClosed(1, 1_000_000) .parallel() .mapToObj(n -> “” + n) .collect(ArrayList::new, ArrayList::add,(m1, m2) -> m1.addAll(m2)); 我知道在这种情况下我们可以简单地使用方法句柄,例如ArrayList::addAll 。 然而,在某些情况下需要一个Lambda,我们必须以正确的顺序组合项目,否则我们可能会在并行处理时得到不一致的结果。 这是否在Java 8 API文档的任何部分中声明了? 或者它真的没关系?