在JAVA的流媒体API中,什么是相当于C#的选择子句?
我想过滤人类班级列表,最后映射到Java中的某些匿名类.我可以在C#中很容易做同样的事情. 人类班级 class Person { public int Id { get; set; } public string Name { get; set; } public string Address { get; set; } } 代码以欲望格式映射结果. List lst = new List(); lst.Add(new Person() { Name = "Pava", Address = "India", Id = 1 }); lst.Add(new Person() { Name = "tiwari", Address = "USA", Id = 2 }); var result = lst.Select(p => new { Address = p.Address, Name = p.Na
0 2024-04-15
编程技术问答社区
如何使用Java 8 Stream映射和收集原始的返回类型
我是Java 8流中的新手,我想知道是否有执行forEach/map返回byte并接受int的方法. 示例: public class Test { private byte[] byteArray; // example of byte array public byte getByte(int index) { return this.byteArray[index]; } public byte[] getBytes(int... indexes) { return Stream.of(indexes) .map(this::getByte) // should return byte .collect(byte[]::new); // should return byte[] } } 您可能会猜到,getBytes方法不起作用. "int[] cannot
0 2024-04-05
编程技术问答社区
在Java 8中,是否有ByteStream类?
java 8分别提供Stream double,int和long:DoubleStream,IntStream和IntStream和LongStream的特殊性.但是,我在中找不到byte的等效物/a>. Java 8是否提供ByteStream类? 解决方案 不,它不存在.实际上,它明确未实现,以免为每种原始类型的大量类杂乱. 引用 简短答案:否. 这些形式不值得100k+ JDK足迹 几乎永远不会使用.如果我们添加了这些,有人会 要求简短,浮动或布尔值. 换句话说,如果人们坚持我们拥有所有原始的 专业,我们将没有原始的专业.哪个 将比现状更糟. 其他解决方案 大多数与字节相关的操作自动升级为INT.例如,让我们考虑一个简单的方法,该方法添加了byte常数byte[]数组返回新byte[]数组(ByteStream的潜在候选者): public static byte[] add(byte[] arr, byte addend)
0 2024-04-05
编程技术问答社区
使用Java 8流的生成器模式
我正在构建一个简单循环的对象: WebTarget target = getClient().target(u); for (Entry queryParam : queryParams.entrySet()) { target = target.queryParam(queryParam.getKey(), queryParam.getValue()); } 我想使用Java8流API做同样的事情,但我不知道该怎么做.让我挣扎的是,目标每次都会重新分配,因此一个简单的.foreach()将不起作用.我想我需要使用.collect()或redail(),因为我正在寻找一个返回值,但目前我迷路了! 解决方案 不幸的是,流API中没有foldLeft方法.其原因由 stuart marks in 此答案: [...]最后,Java不提供foldLeft和foldRight操作,因为它们暗示了固有顺序的操作的特定顺序.这与上面指
2 2024-04-04
编程技术问答社区
以并行方式将 "BufferedReader "转换为 "Stream<String>"。
是否有一种方法可以从BufferedReader reader中接收Stream stream,以便stream中的每个字符串代表reader的一行,并具有直接提供stream的附加条件(reader之前阅读所有内容)?我想处理stream的数据,与从reader中获取它们以节省时间. 编辑:我想处理平行于阅读的数据.我不想处理不同的行.它们应该按顺序进行处理. 让我们以我要节省时间的方式举例说明.假设我们的reader将向我们展示100行.读取一行和1毫秒需要2 ms来处理它.如果我第一次阅读所有行,然后处理它们,则需要300毫秒.我要做的是:一旦阅读,我想对其进行处理并并行阅读下一行.然后总时间为201 ms. 我不喜欢BufferedReader.lines():据我所知,当我想处理线条时开始阅读.假设我已经有我的reader,但是必须在处理第一行之前进行预反理.假设他们花了30毫秒.在上面的示例中,总时间将是231 ms或使用reader.lin
0 2024-04-04
编程技术问答社区
在java8流中添加大小数
我想知道一种方法是否比另一种方法更有效.有更好的Java 8方法可以执行以下操作吗? Java 8 Way BigDecimal total = entries.parallelStream() .map(poec -> BigDecimal.valueOf(poec.getQuantity().longValue() * poec.getAdjustedUnitPrice().doubleValue())) .collect(Collectors.toList()).stream() .reduce(BigDecimal.ZERO, BigDecimal::add); 普通Java 7方法 for (final EntryConsumed poec : entries) { total = total.add(BigDecimal.valueOf(poec.getQuantity().longValue() * poec
2 2024-03-30
编程技术问答社区
BigDecimal汇总统计
我有一个大十分之列的列表. List amounts = new ArrayList() 如何使用Java 8流获得上述列表的摘要统计信息,而不会丢失最多3-4个小数点的精度? 解决方案 我创建了BigDecimal /** * Like {@code DoubleSummaryStatistics}, {@code IntSummaryStatistics}, and * {@code LongSummaryStatistics}, but for {@link BigDecimal}. */ public class BigDecimalSummaryStatistics implements Consumer { public static Collector statistics() { return Collector.of(
14 2024-03-30
编程技术问答社区
使用流进行大小数相加
我有一个我想加在一起的bigdecimals集合(在此示例中,a LinkedList).是否可以使用流来计算其总和? 我注意到Stream类有几种方法 Stream::mapToInt Stream::mapToDouble Stream::mapToLong 每个都有方便的sum()方法.但是,众所周知,float和double浮点类型使折衷准确性速度. 那么,是否有一种方便的方式来总结大截止数字? 这是我到目前为止的代码. public static void main(String[] args) { LinkedList values = new LinkedList(); values.add(BigDecimal.valueOf(.1)); values.add(BigDecimal.valueOf(1.1)); values.add(BigDecimal.valueOf(2.1)
0 2024-03-30
编程技术问答社区
验证简单的for/lambda比较的JMH测量结果
我想对循环和等效流实现的简单进行一些性能测量和比较.我认为,流的情况将比同等的非流程代码慢一些,但是我想确保我正在测量正确的事物. 我在这里包括我的整个JMH课程. import java.util.ArrayList; import java.util.List; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; @State(Scope.Benchmark) public class MyBenchmark { List shortLengthListConstantSize = null; List mediu
0 2024-03-30
编程技术问答社区
为什么 "parallelStream "比 "CompletableFuture "的实现快?
我想在某个操作中提高后端REST API的性能,该操作顺序对多个不同的外部API进行了轮询,并收集了它们的响应,并将它们全部压缩为单个响应列表. 最近才了解CompletableFuture s,我决定尝试一下,并将该解决方案与仅将我的stream更改为parallelStream进行比较的解决方案. . 这是用于基准测试的代码: package com.foo; import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import org.junit.jupiter.api.AfterEach; import org.junit.jupit
0 2024-03-30
编程技术问答社区
为什么IntStream.range(0, 100000).parallel().foreach的时间比正常的for循环长?
我刚刚开始了解流中的流并在Java中并行,我想知道为什么循环的正常循环花费的时间少于IntStream在将项目添加到数组时所花费的时间. package parallel; import java.util.stream.IntStream; public class Parallel { public static void main(String[] args) { final int[] intArray = new int[100000]; long startTime = System.currentTimeMillis(); IntStream.range(0, 100000).parallel().forEach(i -> intArray[i]=i); long endTime = System.currentTimeMillis(); System.out.prin
0 2024-03-30
编程技术问答社区
具有批处理功能的Java 8流
我有一个包含项目列表的大文件. 我想创建一批项目,使用此批次进行HTTP请求(所有项目都需要作为HTTP请求中的参数).我可以通过for循环很容易做到这一点,但是作为Java 8情人,我想尝试使用Java 8的流框架(并获得懒惰处理的好处). . 示例: List batch = new ArrayList(BATCH_SIZE); for (int i = 0; i 0) process(batch); 我想做一些很长的路线 lazyFileStream.group(500).map(processBatch).collect(toList()) 最好的方法是什么? 解决方案 注意! 此解决方案在
2 2024-03-29
编程技术问答社区
用Java从S3上的文件中创建一个压缩文件
我在S3上有很多文件,我需要拉链,然后通过S3提供ZIP.当前,我将它们从流到本地文件将其汇总,然后再次上传文件.这占用了很多磁盘空间,因为每个文件的范围约为3-10MB,我必须划线高达100.000个文件.因此,邮政编码可以具有超过1TB.因此,我想要一个解决方案: 创建一个Zip使用lambda节点从S3上的文件上归档 在这里,它接缝了ZIP,直接在S3上创建,而无需占用本地磁盘空间.但是我只是不够聪明,无法将上述解决方案转移到Java.我还发现有关Java AWS SDK的相互矛盾的信息,说他们计划在2017年改变流行为. 不确定这是否会有所帮助,但这是我到目前为止一直在做的事情(Upload是我的本地模型,符合S3信息).我只是删除了记录和东西,以获得更好的可读性.我认为我不会为下载"管道"直接下载到拉链中的"管道".但是就像我说的那样,我也想避免本地zip文件并在S3上直接创建它.但是,这可能需要用S3作为目标而不是FileOutputStream创建ZipO
2 2024-03-22
编程技术问答社区
如何在Java中找到列表中过滤后的元素的平均值
我希望在给定的一年中找到特定分支机构的平均销售额.有一个清单,该清单拥有所有分支机构和所有销售的清单.我尝试使用Intstream使用所需的年份和分支来过滤元素,但是我找不到平均值,在indexofsaleintheyear.size()中显示出一个错误,我不确定平均零件代码是否是正确的.请帮忙.谢谢. Scanner avgSale = new Scanner(System.in); System.out.println("Please enter the year for average sale: \n"); int yearEntered = avgSale.nextInt(); Scanner branchNameForAvg = new Scanner(System.in); System.out.println("Please enter the branch name whose average sale is to be foun
2 2024-03-21
编程技术问答社区
如何使用流API Java获取胶片的每个类别的平均持续时间
我有一个带有以下字段的班级电影 String name; double duration; Collection categories; 我的任务是返回代表平均持续时间类别的Map. 我必须使用Java的流API. 我的想法是为类别形成String的条目,而List其中元素是不同的持续时间,然后使用流API方法映射并将其映射到绘制字符串和平均值.但是我不确定该怎么做.有人可以帮我怎么做吗? 解决方案 您可以使用 Collectors.groupingBy() 的三芳烃形式,带有下游 Collectors.averagingDouble() collector在一次通过中进行. Java 17示例(包括使用Map.Entry模拟2元素元组或一对类): import java.util.*; import java.util.stream.*; public c
8 2024-03-21
编程技术问答社区
java 8并行流,阻断码可能吗?
我的情况很简单. 我有一个我想在每个项目上执行逻辑的列表. 所有线程完成后,我想调用一个密切的连接. 喜欢: bucketsList.parallelStream().forEach(t -> { //some logic }); try { RestApi.getInstance().closeClientConnection(); } catch (IOException e) { e.printStackTrace(); } 有没有办法使闭合零件等待平行流完成所有对象? 编辑: 我无法使用CountDownLatch,因为我不知道我在bucketslist中将拥有多少个项目 解决方案 ParallelStream上的操作仍在阻塞,将等待其产生的所有线程完成.这些线程是异步执行的(它们不等待前一个线程完成),但这并不意味着您的整个代码开始异步! 如果您实际上是在您的forEach中进行异步调用并处理所得的Complet
0 2024-03-18
编程技术问答社区
用流将字符串转换成二维数组 [Java 8]
我目前正在学习如何进行流,同时进行一些娱乐作业(代码的出现).虽然我知道如何使用临时数组进行操作,但我不知道流的正确语法,或者甚至可以在一行中进行操作. public class M3 { public static void main(String[] args) { String s = "104\t240\t147\t246\t123\t175\t372\t71\t116\t230\t260\t118\t202\t270\t277\t292\n" + "740\t755\t135\t205\t429\t822\t844\t90\t828\t115\t440\t805\t526\t91\t519\t373\n" + "1630\t991\t1471\t1294\t52\t1566\t50\t1508\t1367\t1489\t55\t547\t342\t512\t323\t51\n" + "1356
2 2024-03-07
编程技术问答社区
用流将Java二维数组转换成二维ArrayList
所以我有一个要转换为ArrayList>的Integer[][] data,所以我尝试使用流并提出以下行: ArrayList> col = Arrays.stream(data).map(i -> Arrays.stream(i).collect(Collectors.toList())).collect(Collectors.toCollection(ArrayList>::new)); 但是最后一部分collect(Collectors.toCollection(ArrayList>::new))给了我一个错误,它不能转换ArrayList> to C. 解决方案 内部collect(Collectors.toList()返回a List,而不是ArrayLi
4 2024-03-06
编程技术问答社区
用流将地图转换成2D数组
我正在尝试使用流来创建String的2D数组: String[] fruit1DArray; String[][] fruit2DArray; Map fruitMap = new HashMap(); fruitMap.put("apple", "red"); fruitMap.put("pear", "green"); fruitMap.put("orange", "orange"); fruit1DArray = fruitMap.entrySet() .stream() .map(key -> key.getKey()) .toArray(size -> new String[size]); fruit2DArray = fruitMap.entrySet() .stream() .map(entry-> new String[]{entry.getKey()}) .toArray(s
2 2024-03-06
编程技术问答社区