java-stream 相关问题

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

使用流 API 从 2 个不同的整数数组中查找重复项

我有2个不同的整数数组 int arr1[] = [1,2,3,4] int arr2[] = [2,3,5,6] 如何使用 java8 的流 api 从上述 2 个数组中查找重复项?

回答 1 投票 0

通过比较键值返回两个列表之间的差异,而不是Java中的整个对象

我有来自同一类的两个列表(例如,具有名称和年龄属性的 Person 类),并且我正在尝试想出一种有效的方法来从列表 A 中删除元素(如果它们出现在列表 B 中),但是

回答 1 投票 0

Java 8 Stream 使用

是否可以使用流来过滤对象列表。 公共类 MyObj{ 私有字符串 ID; 私有字符串版本; } MyObj obj1=new MyObj("自行车","1.8"); MyObj 对象...

回答 1 投票 0

使用 Java8 流 API 从集合中删除最大值(或最小值)

我对使用 Java 8 中的新流 API 的代码设计没有什么问题。我想学习新东西,任务之一是: 拒绝列表中的最大值和最小值。列表不包含重复项。 ...

回答 3 投票 0

子列表上的分区列表,其中相似的元素被分组

我有一个List元素。这个名单很大。列表大小约为 1M 条记录。我正在尝试对列表进行分区以获得每个分区的最小值和最大值,我将通过... 我有一个List<object>元素。这个名单很大。列表大小约为 1M 条记录。我正在尝试对列表进行分区以获得每个分区的最小值和最大值,我会将它们传递给数据库查询。 我目前正在通过以下方式执行此操作: int gridSize = 6; List<object> objectList = findAll(); List<List<object>> partitionedList = ListUtils.partition(objectList, (objectList.size() + gridSize - 1) / gridSize); for(List<object> objects : partitionedList) { List<Long> keys = objects.stream().map(x -> x.getKey()).collect(Collectors.toList()); //Do some processing on keys collected in the above list LongSummaryStatistics idStats = objects.stream().collect(Collectors.summarizingLong(e -> e)); repo.callToDb(idStats.getMin(), idStats.getMax()); //further processing } 上面的代码工作正常,但我在我的对象中重复了键,如下所示: 输入: Car[id: 1, name:Tesla, Key: 1] Car[id: 2, name:Tesla-3, Key: 2] Car[id: 3, name:Tesla-Y, Key: 2] Car[id: 4, name:Tesla-S, Key: 3] 当我使用上面的代码进行分区时,块大小为:2,我得到的分区为: Partition-1: Car[id: 1, name:Tesla, Key: 1] Car[id: 2, name:Tesla-3, Key: 2] Partition-2: Car[id: 3, name:Tesla-Y, Key: 2] Car[id: 4, name:Tesla-S, Key: 3] 相反,我希望第一个分区中的键不要在第二个分区上重复。 所以,本质上我希望分区看起来像这样: Partition-1: Car[id: 1, name:Tesla, Key: 1] Car[id: 2, name:Tesla-3, Key: 2] Car[id: 3, name:Tesla-Y, Key: 2] Partition-2: Car[id: 4, name:Tesla-S, Key: 3] 有没有一种方法可以通过前面提到的块大小来实现这一点。预先感谢! 编辑: 这是我写的: int gridSize = 6; List<List<object>> partitionedList = new ArrayList<>(); Map<Integer, Pair<Long, Long>> minMaxPairMap = new HashMap<>(); List<object> objectList = findAll(); List<object> uniqueKeys = objectList.stream() .filter(distinctByKey(x -> x.getKey())).collect(Collectors.toList()); List<List<object>> uniqueKeysPartition = ListUtils.partition(uniqueKeys, (uniqueKeys.size() + gridSize - 1) / gridSize); for (int i = 0; i < uniqueKeysPartition.size(); i++) { List<object> ojList = uniqueKeysPartition.get(i); LongSummaryStatistics longSummaryStatistics = ojList.stream().map(object::getKey).collect(Collectors.toList()).stream().collect(Collectors.summarizingLong(e -> e)); minMaxPairMap.put(i, Pair.of(longSummaryStatistics.getMin(), longSummaryStatistics.getMax())); partitionedList.add(objectList.subList( getFirstIndexOf(objectList, longSummaryStatistics.getMin()), getLastIndexOf(objectList, longSummaryStatistics.getMax()) + 1)); } for (int i = 0; i < partitionedList.size(); i++) { List<Long> keys = objects.stream().map(x -> x.getKey()).collect(Collectors.toList()); //Do some processing on keys collected in the above list Pair<Long, Long> minMaxPair = minMaxPairMap.get(i); repo.callToDb(minMaxPair.getFirst(), minMaxPair.getSecond()); //further processing } 是否有更好的方法来实现这一目标,因为我觉得我已经将其复杂化以实现我想要的目标? 仅当数据按键排序或至少聚类时,移动分区边界才有意义,否则,任意其他分区中可能存在其他出现情况。 如果数据已排序,任务就相当简单了。执行像 ListUtils.partition 这样的方法,但添加一个检查分区的最后一个元素的键是否与下一个分区的第一个元素的键匹配,如果是,则增加分区的结束索引: static <T, K extends Comparable<? super K>> List<List<T>> partition( List<T> data, int minSize, Function<T, K> keyFunction) { List<T> workingCopy = new ArrayList<>(data); workingCopy.sort(Comparator.comparing(keyFunction)); List<List<T>> result = new ArrayList<>(); for(int ix = 0, ix2; ix < data.size(); ix = ix2) { ix2 = Math.min(workingCopy.size(), ix + minSize); for(K lastKey = keyFunction.apply(workingCopy.get(ix2 - 1)); ix2 < data.size() && Objects.equals(lastKey, keyFunction.apply(workingCopy.get(ix2)));) { ix2++; } result.add(workingCopy.subList(ix, ix2)); } return result; } 这可以像这样进行测试 record TestObj(int key, String name) {} List<TestObj> objectList = IntStream.range('A', 'Z') .mapToObj(c -> new TestObj(ThreadLocalRandom.current().nextInt(0, 10), "" + (char)c)) .toList(); List<List<TestObj>> partitions = partition(objectList, 6, TestObj::key); System.out.println(partitions.size() + " partitions"); for(List<TestObj> p: partitions) { System.out.println("(" + p.size() + " elements)"); p.forEach(System.out::println); System.out.println(); } 在 jdoodle.com 上测试 请注意,如果键不是Comparable,您可以将排序操作变成聚类操作,例如 Map<Object, Integer> chunkID = new HashMap<>(); List<List<TestObj>> partitions = partition(objectList, 6, o -> chunkID.computeIfAbsent(o.key(), k -> chunkID.size())); 由于这会按照出现的顺序为每个不同的键分配一个升序数字,然后用于排序,因此它将最大限度地减少对遇到顺序所做的更改,如果元素已经聚类,则不会发生任何更改。

回答 1 投票 0

查找字符串数组中最长的字符串

这个问题是我尝试这样做,但我检查字符串长度的方法不起作用;我能做什么来修复它? 公共静态无效主(字符串[] args){ 字符串[]

回答 5 投票 0

如何延迟连接流?

我正在尝试实现一个在其实现中使用其自身的另一个实例的流。该流前面添加了一些常量元素(使用 IntStream.concat),因此这应该像...

回答 3 投票 0

词频统计Java 8

Java 8中如何统计List的单词频率? List WordsList = Lists.newArrayList("你好", "再见", "再见", "再见", "再见"); 结果必须是: {ciao=2,你好=1,再见=2}

回答 12 投票 0

使用流API循环字段而不是对象

我想使用 Java 8 的流 api 进行以下练习: 给定一个列表人员 Person 是一个简单的 POJO,具有名称(字符串)和年龄(整数)属性 构造以下字符串...

回答 3 投票 0

使用java流获取逗号分隔的字符串

我有以下使用java Stream的代码。 我正在尝试使用 get 函数来构建一个值字符串:在本例中为“a,b”。 但是,输出(在本例中通过逗号分隔)始终为“b”。 共...

回答 3 投票 0

从列表中收集对象的多个属性的简单方法

如果我有一个具有多个相同类型属性的对象列表,那么收集该列表的所有属性的最佳方法是什么? 类问题{ 长id1; 隆...

回答 1 投票 0

如何将 Uni<Response> 对象转换为 String?

我正在使用 Quarkus 应用程序,该应用程序具有依赖的客户端服务,该服务将响应作为 Uni 对象类型传递给我 Uni 响应 = clinetService.someMethod(id); 现在我需要通过

回答 1 投票 0

使用 Java 流从集合中查找最小和最大数字

下面是代码片段,正如预期的那样,它在编译时失败。 我真正想做的是使用流从所有列表中找到最小值和最大值。 公共类删除{ 公共...

回答 2 投票 0

带有可变参数的 Java StreamdistinctByKey 过滤器

我有一个要求,我需要从列表中获取不同的元素,并且不同的键字段是可变的。我试图在distinctByKey 中传递变量参数,但它不起作用。这里是...

回答 1 投票 0

如何通过列表向 Collectors.toMap() 添加键和值?

MapemployeesMeetups = new HashMap<>(employeesId.size()); for(字符串员工 ID : 员工 ID) { 列出聚会 = meetupRepository. getAllByEmployeeId(employeeId). 流()....

回答 1 投票 0

以编程方式将用户输入命令直接发送到正在运行的进程

我有一个通过脚本启动的程序,我开始使用 Processbuilder ProcessBuilder pb = new ProcessBuilder("命令", "脚本"); 进程process = pb.start

回答 1 投票 0

java 8 如何获取多个属性的不同列表

如何从对象列表中获取不同的(基于两个属性的不同)列表。 例如,让有包含属性名称和价格的对象列表。 现在我怎样才能得到一个带有 dist 的列表...

回答 4 投票 0

Codingbat 挑战:sumNumbers Stream API 解决方案

给定来自 CodingBat 的任务 sumNumbers: 给定一个字符串,返回字符串中出现的数字的总和, 忽略所有其他字符。数字是一系列 1 个或多个数字 r 中的字符...

回答 4 投票 0

如何在 ListView 中显示对象的文本字段中的更改?

我目前正在用 Java 编写一个小型 Zettelkasten-app* 并在 scenebuilder 中构建大部分 GUI。 与问题无关的进一步描述,仅在感兴趣时阅读斜体部分: (应用程序

回答 2 投票 0

使用 Stream 和 java8 以一个字符串返回工资的最小值、最大值、平均值、总和、计数

我有一个以工资为特征的员工列表。 为什么这段代码不起作用? 字符串连接=employees.stream().collect( Collectors.summingInt(Employee::getSalary), 收集...

回答 3 投票 0

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