Tag: java stream

在java流中遇到订单保存

我已经完成了相关的问题,例如如何确保java8流中的处理顺序? ,仍然对输出元素的排序并不完全清楚。 因此请澄清我的以下疑问。 Integer[] intArray = {1, 2, 3, 4, 5, 6, 7, 8 }; List listOfIntegers = new ArrayList(Arrays.asList(intArray)); listOfIntegers .parallelStream() .unordered() .forEachOrdered(e -> System.out.print(e + ” “)); 我认为至少在理论上(或根据java规范)它可以按照随机顺序打印,而不是1,2,3,4,5,6,7,8。我是否正确? 还有一个相关的问题 – 在执行的哪个阶段采取遭遇订单保留的决定? 更确切地说 – 即使在执行开始之前,通过查看源,中间操作和终端操作的特征来评估整个流管道ORDER特性?

如何使用Java 8流迭代嵌套for循环引用父元素?

我想使用java8 streams迭代嵌套列表,并在第一次匹配时提取列表的一些结果。 不幸的是,如果子元素与filter匹配,我还必须从父内容中获取值。 我怎么能这样做? // java7 Result result = new Result(); //find first match and pupulate the result object. for (FirstNode first : response.getFirstNodes()) { for (SndNode snd : first.getSndNodes()) { if (snd.isValid()) { result.setKey(first.getKey()); result.setContent(snd.getContent()); return; } } } // java8 response.getFirstNodes().stream() .flatMap(first -> first.getSndNodes()) .filter(snd -> snd.isValid()) .findFirst() .ifPresent(???); //cannot access snd.getContent() here

在使用先前元素值对每个元素执行操作之后,使用Java 8 Stream Reduce返回List

我是Streams和Reduce的新手,所以我正在尝试并遇到问题: 我有一个计数器列表,它有一个启动计数器和结束计数器。 项目的startcounter始终是前一个的终结者。 我有一个列表,这些计数器listItems ,我想有效地循环,过滤掉非活动记录,然后将列表减少到一个新的列表,其中设置了所有的StartCounters。 我有以下代码: List active = listItems.stream() .filter(e -> e.getCounterStatus() == CounterStatus.ACTIVE) .reduce(new ArrayList(), (a,b) -> { b.setStartCounter(a.getEndCounter()); return b; }); 但它并没有真正奏效,我有点卡住了,有人能给我一些建议来帮我搞定吗? 或者是否有同样有效的更好的方法来做到这一点? 谢谢!

使用Spring MVC流可关闭资源

阅读完本文之后 ,我希望使用Spring将数据库查询结果直接流式传输到JSON响应,以确保内存使用率不变(内存中没有贪婪的List加载)。 与使用Hibernate的文章中所做的类似,我组装了一个greetingRepository对象,该对象根据JdbcTemplate返回数据库内容的流。 在该实现中,我在查询的ResultSet创建了一个迭代器,并按如下方式返回流: return StreamSupport.stream(spliterator(), false).onClose(() -> { log.info(“Closing ResultSetIterator stream”); JdbcUtils.closeResultSet(resultSet); }); 即使用onClose()方法,如果在try-with-resources构造中声明了流,则保证将关闭基础ResultSet : try(Stream stream = greetingRepository.stream()) { // operate on the stream } // ResultSet underlying the stream will be guaranteed to be closed 但正如在文章中,我希望这个流由自定义对象映射器(文章中定义的增强的MappingJackson2HttpMessageConverter )使用。 如果我们将try-with-resources需求放在一边,这可行如下: @RequestMapping(method = GET) Stream stream() { return greetingRepository.stream().map(GreetingResource::new); } 然而,正如一位同事在该文章底部评论的那样,这并没有关闭基础资源。 在Spring MVC的上下文中,我如何从数据库一直流式传输到JSON响应中并仍然保证ResultSet将被关闭? 你能提供具体的示例解决方案吗?

使用Java流的一对一地图

使用Stream API获取一对一映射时遇到一些麻烦。 基本上,说你上课了。 public class Item { private final String uuid; private Item(String uuid) { this.uuid = uuid; } /** * @return universally unique identifier */ public String getUuid() { return uuid; } } 我想要一个Map以便于查找。 但是给定一个Stream ,似乎没有一种简单的方法来到达Map 。 显然, Map<String, List>不是没有的东西: public static Map<String, List> streamToOneToMany(Stream itemStream) { return itemStream.collect(groupingBy(Item::getUuid)); } 这是更安全更普遍的情况,但我们确实知道在这种情况下只会一对一。 我找不到任何可编译的东西 – 我特别试图将downstream参数混淆为Collectors.groupingBy […]

Java 8,Lambda:在分组列表中排序并将所有组合并到列表中

基于以下答案: https : //stackoverflow.com/a/30202075/8760211 如何通过stud_id对每个组进行排序,然后通过stud_location返回一个包含所有学生的List作为分组结果,然后按stud_id排序? 将它作为现有Lambda表达式的扩展会很棒: Map<String, List> studlistGrouped = studlist.stream().collect(Collectors.groupingBy(w -> w.stud_location)); 我需要根据原始列表中元素的顺序进行分组。 First group: “New York” Second group: “California” Third group: “Los Angeles” 1726, “John”, “New York” 4321, “Max”, “California” 2234, “Andrew”, “Los Angeles” 5223, “Michael”, “New York” 7765, “Sam”, “California” 3442, “Mark”, “New York” 结果将如下所示: List groupedAndSorted = …. 1726, “John”, “New […]

Java 8 Collector UNORDERED特性是什么意思?

在官方文档中,您可以阅读: UNORDERED指示集合操作不承诺保留输入元素的遭遇顺序。 没有任何例子,这没有太大帮助。 我的问题是, UNORDERED特征到底意味着什么? 我应该使用减少收集器,如min或sum,还是只适用于收集器? 在OpenJDK看起来像减少操作(min,sum,avg)具有空特征。 我期望在那里找到至少CONCURRENT和UNORDERED 。

Java Stream Collectors.toMap值是一个Set

我想使用Java Stream来运行POJO列表,例如下面的列表List ,并将其转换为Map Map<String, Set> 。 例如,A类是: class A { public String name; public String property; } 我编写了下面的代码,将值收集到地图Map : final List as = new ArrayList(); // the list as is populated … // works if there are no duplicates for name final Map m = as.stream().collect(Collectors.toMap(x -> x.name, x -> x.property)); 但是,因为可能有多个具有相同name POJO,所以我希望map的值为Set 。 同一个键name所有property字符串应该进入同一个集合。 […]

与Java 8流的生成器模式

我正在使用一个简单的循环构建一个对象: WebTarget target = getClient().target(u); for (Entry queryParam : queryParams.entrySet()) { target = target.queryParam(queryParam.getKey(), queryParam.getValue()); } 我想使用Java8 Stream API做同样的事情,但我无法弄清楚如何做到这一点。 让我奋斗的是每次都重新分配目标,所以一个简单的.forEach()将不起作用。 我想我需要使用.collect()或reduce(),因为我正在寻找单个返回值,但此刻我迷路了!

使用Collection.stream按特定属性进行动态分组

我试图通过使用Java 8 Collection-Stream按多个属性对对象列表进行分组。 这非常有效: public class MyClass { public String title; public String type; public String module; public MyClass(String title, String type, String module) { this.type = type; this.title = title; this.module= module; } } List data = new ArrayList(); data.add(new MyClass(“1″,”A”,”B”)); data.add(new MyClass(“2″,”A”,”B”)); data.add(new MyClass(“3″,”A”,”C”)); data.add(new MyClass(“4″,”B”,”A”)); Object result = data.stream().collect(Collectors.groupingBy((MyClass m) -> m.type, […]