java-stream 相关问题

使用此标记可以获得与使用Stream API相关的问题。它是在Java 8中引入的,支持对值流进行功能样式的操作,例如集合上的filter-map-reduce管道。

如何从 Java 8 中的流中收集两个和

类股票{ 双倍利润; 双倍利润百分比; 公共双 getProfit(){ 返还利润; } 公共双 getProfitPercentage(){ 回报利润百分比; } } 列表...

回答 2 投票 0

Java 流。对对象流中的两个字段求和

我有这样的事情: 整数totalIncome = carDealer.getBrands().stream().mapToInt(brand -> Brand.getManufacturer().getIncome()).sum(); 整数totalOutcome = carDealer.getBrands().strea...

回答 3 投票 0

使用 Hibernate 和 Spring 在 Java Stream 中处理数据库中的实体是否合适?

例如,我想使用 Spring Data JPA 从数据库中获取实体集合,修改它们并在数据库中更新: repository.findAll().stream.map(e -> ...).forEach(e ->repository....

回答 1 投票 0

使用 java 8 地图过滤值

我正在使用 CSV 文件阅读器。需要替换上面行中的 12345,sdc,CAP,12345:sdc-posistion-svc:SnakeYAML:2.1:3 (12345 和 3)的第一个和最后一个单词,并将“:”替换为“,” ...

回答 2 投票 0

使用Java进行索引加权选择的最佳简洁方法

如果我们有一个双精度列表作为 List 权重,我们想要选择它的一个索引,其中直到该索引的累积和大于随机数。如果循环到达末尾...

回答 1 投票 0

以与其余不同的方式映射流的第一个元素

Java 的 Stream API 中是否有一种方法可以以不同于其他方式映射流的第一个元素? 此代码的等效项: List barList = new ArrayList<>(); 对于 (int i=0; i Java 的 Stream API 中是否有一种方法可以与其他元素不同地映射流的第一个元素? 此代码的等效项: List<Bar> barList = new ArrayList<>(); for (int i=0; i<fooList.size(); i++) { Foo foo = fooList.get(i); Foo modifiedFoo = foo.getModifiedFoo(); if (i == 0) { barList.add(new Bar(modifiedFoo, false)); }else { barList.add(new Bar(modifiedFoo, true)); } } Stream<Bar> = barList.stream(); 注意:我已经有一个流设置,我想在第一次映射后进行一些操作 fooList.stream() .map(Foo::getModifiedFoo) .(May be Some operation here to get different new Bar for first modifiedFoo) .map(modifiedFoo -> new Bar(modifiedFoo, true)); 我将获取第一个元素,从中创建一个 Stream 并应用所需的映射。然后,我将获取列表的其余部分,从中创建一个流并应用不同的映射。然后concat流。像这样的东西: Stream<Bar> first = Stream.of(fooList.get(0)) .map(Foo::getModifiedFoo) .map(modifiedFoo -> new Bar(modifiedFoo, false)); Stream<Bar> others = fooList.subList(1, fooList.size()).stream() .map(Foo::getModifiedFoo) .map(modifiedFoo -> new Bar(modifiedFoo, true)); Stream<Bar> bars = Stream.concat(first, others).flatMap(s -> s); 另一种方法: Stream<Bar> bars = IntStream.range(0, fooList.size()) .mapToObj(i -> new Bar(fooList.get(i).getModifiedFoo(), i > 0)); 这种方式很简洁,而且效果很好。 使用 IntStream 迭代索引,然后使用 mapToObj 为该索引创建一个对象,最后收集到一个列表中: List<Bar> barList = IntStream.range(0, fooList.size()) .mapToObj(i -> (i == 0 ? new Bar (fooList.get(i), false) : new Bar(fooList.get(i),true))) .collect(Collectors.toList()); 不过,更具可读性的是,在循环外进行第一项处理,并使用从 1 开始的 IntStream。 这是一个使用简单列表的演示。 我可以提出两种方法,但我发现你的方法更直接。 与 IntStream 例如: List<Bar> barList = new ArrayList<>(); IntStream.range(0, fooList.size()) .forEach(i->{ if (i == 0) { barList.add(new Bar(foo, false)); }else { barList.add(new Bar(foo, true)); } } ); 这不是一个真正的函数式方法(forEach()使用并且没有Collector),因为它维护列表的当前索引。 作为替代方案,您可以使用更实用的方法,但我也不认为它更直接: List<Bar> barList = IntStream.range(0, fooList.size()) .mapToObj(i->{ Foo foo = fooList.get(i); if (i == 0) { return new Bar(foo, false); } return new Bar(foo, true)); }) .collect(Collectors.toList()); 虽然我认为接受的答案更好,但这里有另一种方法。 int[] counter = {-1}; Stream<Bar> barListStream = fooList.stream().map(foo -> { counter[0]++; return new Bar(mfoo.getModifiedFoo(), counter[0]>0); }).collect(Collectors.toList()).stream(); 使用初始设置为 true 的 AtomicBoolean 来确定第一项何时出现。 final AtomicBoolean first = new AtomicBoolean(true); System.out.println("** Print all numbers 1..10"); IntStream.range(1, 11).forEach(number -> { System.out.print((first.get() ? "" : ",") + number); first.set(false); }); System.out.println(); 您可以使用一个物体来持有旗帜,例如AtomicBoolean 或 AtomicInteger - 您可以在第一次或第 n 次迭代时重置(您需要像 AtomicInteger 或某些 Integer 持有者这样的东西才能在第 n 次迭代时重置),例如以下代码使用 HashMap 作为持有者类 - 将以不同于其他行的方式打印流的第一行: Map<String, Boolean> firstTime = new HashMap<>(Map.of("firstTime", true)); // to make the map modifiable try (Stream<String> lines = Files.lines(Paths.get(filename), Charset.defaultCharset())) { lines.forEachOrdered(line -> System.out.println(firstTime.remove("firstTime") != null ? ("firstTime: " + line) : line)); } 也许是这样的: Stream<Bar> barStream = barList.stream(); List<Bar> bars = barStream.skip(1) .map(modifiedFoo -> new Bar(modifiedFoo, false)) .collect(Collectors.toList()); barStream.findFirst() .map(modifiedFoo -> new Bar(modifiedFoo, true)) .ifPresent(bars::add);

回答 7 投票 0

存在“无法解析方法”的流

为什么有问题的线路无法工作? IDE 说 无法解析方法“identify(String[])”” 但这是对的。那里 公共类 PersonApp { 公共静态无效主(字符串[] args){ ...

回答 1 投票 0

如何添加两个以上的 BigDecimals 字段来计算按收集器分组中的总和

这是我对值进行分组并对客户的所有未偿余额进行求和的方法。 但我还有两个值,我需要计算总和: 大十进制

回答 1 投票 0

Java Stream:通过比较两个集合中的属性值返回独占元素

考虑以下 POJO 类,请注意所有属性都可以为 null 并且不被Optional 包裹 公开课美食{ 字符串名称; // 可以为空 双倍重量; // 得到...

回答 1 投票 0

如果两个 ArrayList 中的属性值相等,则使用流,然后在 Java 中将它们组合在一起?

尝试合并两个数据,一个用于电影,另一个用于流派,前提是两个属性的 id 相同。 两者都有 id、name 字段,请考虑 Movie 中的 id 是 PK,Genre 使用 i...

回答 1 投票 0

在单行中获取流/列表的最后一个元素

如何在以下代码中获取流或列表的最后一个元素? 其中 data.careas 是一个列表: CArea 首先 = data.careas.stream() .filter(c -> c.bbox.

回答 10 投票 0

运行 findFirst() 后恢复 Java Stream 的处理

给定一个简单的字符串列表: List strings = Arrays.asList("Mary", "James", "Jim", "Camilla"); 我想处理列表中的每一项...

回答 5 投票 0

获取 java.lang.ClassCastException:使用 FlatMap 时,类 lambda.Student 无法转换为类 java.lang.Comparable

当stream.filter返回多个结果时出现java.lang.ClassCastException 包拉姆达; 导入java.util.ArrayList; 导入 java.util.LinkedList; 导入java.util.List; 导入 java.util.s...

回答 2 投票 0

Java 将对象列表与列表映射到 Dto

我有一个类对象: A类{ 字符串名称; 列出用户; } 类用户{ 字符串acc; 年龄; } 现在我有一个 A List foo 的列表 还有一个 DTO 类: 类 ADto { 圣...

回答 2 投票 0

Collectors.joining 与 StringBuilder.append

就性能而言,哪一个更好? FinalWords.stream().forEach(word -> stringBuilder.append(word).append(”,“)); 字符串最终结果 = stringBuilder.toString(); VS 字符串最终Re...

回答 2 投票 0

使用 java 8 流从两个单独的对象列表中获取匹配对象对的列表

我有一个要求,我希望在某些条件下从两个对象中获得一对匹配的对象 例如: 公司{ ID; 公司名称: 地址; } 员工 { ID; 公司ID; 姓名; 多布; 地址; } 所以从

回答 2 投票 0

如何映射到多个元素并收集

最终列表toys = Arrays.asList("新玩具(1)", "新玩具(2)"); 最终列表 itemList =toys.stream() .map(玩具 -> { 返回 Item.from(玩具); //创建项目类型 }).

回答 3 投票 0

Java Stream API,从包含两个单独列表的列表中将结果收集到 Map<code, concatenated string>

这里是需要使用 Stream API 生成输出的代码,如下所示。 输入: [子组(id=1,名称=[名称(语言代码=1,longName=ABD),名称(语言代码=2,longName=BD)],级别=级别(nam...

回答 1 投票 0

发生IllegalStateException,写入流

我在这里做错了什么: 私有静态无效 writeAllTxtSorted(String fileId) { 尝试 { 路径文件 = tmp.resolve("AllTxt" + fileId); 文件.deleteIfExists(文件); 69->...

回答 1 投票 0

Java 使用 Streams API 将嵌套哈希图返回为 Json 格式的字符串

我有一个嵌套的HashMap,声明为Map。 Map m1 = new HashMap<>(); m1.put("姓名","玛丽"); m1.put("电子邮件&quo...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.