草庐IT

java - 处理多个流中的所有异常

我希望将我的程序异常发送给以下每个,最好是同时发送:启动它的控制台(不一定)一个贵一个txt文件。我怎样才能做到这一点?我的尝试:System.setErr(PrintStreamerr)会将所有异常转发到新流。我无法说明更多虽然是一个流。调用System.setErr(PrintStreamerr)在手写的OutputStream上:"YoucanwriteyourownstreamclassthatforwardstomultiplestreamsandcallSystem.setOutonaninstanceofthatclass"–JeffreyBosboom我找到了一种方法来

java - 如何处理超过默认线程数的 Java 流?

默认情况下,Java流由commonthreadpool处理,它是用默认参数构造的。正如在anotherquestion中回答的那样,可以通过指定自定义池或设置java.util.concurrent.ForkJoinPool.common.parallelism系统参数来调整这些默认值。但是,我一直无法通过这两种方法中的任何一种来增加分配给流处理的线程数。例如,考虑下面的程序,它处理包含在其第一个参数中指定的文件中的IP地址列表,并输出解析的地址。在具有大约13000个唯一IP地址的文件上运行此程序,我看到使用OracleJavaMissionControl的线程只有16个。其中,只

java - 从并行流中捕获异常

我有一堆来自csv文件的列作为字符串数组。现在我想解析它们。由于此解析需要日期解析和其他不太快的解析技术,所以我在考虑并行性(我计时了,这需要一些时间)。我的简单方法:Stream.of(columns).parallel().forEach(column->result[column.index]=parseColumn(valueCache[column.index],column.type));Columns包含ColumnDescriptor元素,它只有两个属性,要解析的列索引和定义如何解析它的类型。没有其他的。result是一个对象数组,它接受结果数组。现在的问题是parse

java - Kafka流加入

我有2个kafka主题-recommendations和clicks。第一个主题具有由唯一ID键控的推荐对象(称为recommendationsId)。每个产品都有一个用户可以点击的URL。clicks主题获取通过点击推荐给用户的那些产品URL生成的消息。设置如此,这些点击消息也由recommendationId键入。注意推荐和点击之间的关系是一对多的。一个推荐可能会导致多次点击,但一次点击总是与一个推荐相关联。每个点击对象都会有一个对应的推荐对象。点击对象的时间戳会晚于推荐对象。推荐和相应点击之间的间隔可能是几秒到几天(比如最多7天)。我的目标是使用Kafka流连接来连接这两个主题。

java - 即使为空,如何干净地处理 java 8 流 "findFirst()"结果

我经常发现与Java8流混淆的一个方面是当中间结果可能为空时,如果它为空或不为空,您需要采用备用路径。例如,如果我有这样的代码:StringpymtRef=defaultValue;OptionalpaymentTender=paymentTenders.stream().filter(pt->(pt.getFlag()==Flag.N||pt.getFlag()==null)).findFirst();if(paymentTender.isPresent()){pymtRef=paymentTender.get().getId();}returnpymtRef;我想弄清楚如何删除条件

java - 如何像grep一样从java 8流匹配前后获取行?

我有一个文本文件,里面有很多字符串行。如果我想在grep中查找匹配前后的行,我会这样做:grep-A10-B10"ABC"myfile.txt如何使用流在Java8中实现等效项? 最佳答案 如果您愿意使用第三方库并且不需要并行性,那么jOOλ提供如下SQL风格的窗口函数Seq.seq(Files.readAllLines(Paths.get(newFile("/path/to/Example.java").toURI()))).window(-1,1).filter(w->w.value().contains("ABC")).for

java - 我是否必须在流读取的列表上进行同步?

如果我有一个线程敏感列表,我通常会在遍历它时这样做:Listlist=Collections.synchronizedList(newArrayList());...synchronized(list){Iteratori=list.iterator();//Mustbeinsynchronizedblockwhile(i.hasNext())foo(i.next());}我想知道我是否使用list.stream()然后对流执行一些操作,如过滤器等,如果我还必须将列表放入同步块(synchronizedblock)或流是否制作列表的副本?谢谢 最佳答案

Java 流 API : Looking for elegant way for filterAndMap

过滤和映射流的默认“最佳实践”是Streamsource;//...Predicatepredicate;//=...Functionmapper;//=...Streamdst=source.filter(predicate).map(mapper);在许多软件项目中,您会遇到必须在多个流上应用相同的过滤器和映射操作的情况。例如,T类对象的集合应该转换为U类对象的列表,其中U是T的子类,我们只需要U的实例。所以可以这样写:Collectionsource;//...Listdst=source.stream().filter(U.class::isInstance).map(U.cl

java - 方法可能无法在异常时关闭流

我在使用findbugs时遇到严重错误:ThemethodcreatesanIOstreamobject,doesnotassignittoanyfields,passittoothermethods,orreturnit,anddoesnotappeartocloseitonallpossibleexceptionpathsoutofthemethod.Thismayresultinafiledescriptorleak.Itisgenerallyagoodideatouseafinallyblocktoensurethatstreamsareclosed.try{...stdErr

java - 兰特流的高性能缓冲

我的代码会消耗大量(目前为数百万,最终为数十亿)相对较短(5-100个元素)的随机数数组,并对它们进行一些不太费力的数学运算。随机数是随机的,理想情况下我想在多核上生成它们,因为随机数生成占我运行时间的50%以上。但是,我很难以不比单线程方法慢的方式分配大量小任务。我的代码目前看起来像这样:for(inti=0;i我采取的没有奏效的方法是:1+个线程填充ArrayBlockingQueue,我的主循环使用并填充数组(这里的装箱/拆箱是killer级操作)在执行数学的非依赖部分时使用Callable生成vector(产生future)(看起来间接的开销超过了我获得的任何并行性yield)