Tag: java 8

使用Java的Akka中的REST客户端

是否有任何无缝机制来执行来自Akka的restful请求(仅使用带有java的akka​​)。 有一个喷雾客户端http://spray.io/documentation/1.2.3/spray-client/但它接缝没有api for java或ssl支持。 还有Akka-Http包,但仍然是实验性的,我找不到客户端api的描述。 到目前为止,我有一种方法可以使用泽西客户端( https://jersey.java.net )并隐藏Akka路由器后面的同步调用,其中有一些演员来完成这项工作。 还有其他建议吗?

慢JDK8编译

尝试在一个大项目上升级到JDK8,与JDK7相比,JDK8上的编译速度非常慢。 以详细模式运行编译器,JDK8编译器停止在从服务器到客户端的实体的大生成转换器类(映射)。 在几种情况下,转换器方法从同一Mapping类调用其他转换器方法。 作为一种解决方法,尝试将Mapping文件拆分为多个文件。 仅在编译Mapping类或包含项目(projectA)时,这显着提高了性能。 但是对于从projectA调用转换器方法的其他项目,编译时间非常慢。 另一个解决方法是使所有转换方法返回null,而不是调用任何其他方法。 同样,性能对projectA有利,但不适用于依赖项目。 ProjectA使用generics,但由于它与JDK6兼容,后者没有引入广义类型推断,可能是另一个导致这种减速的JDK8错误。 因此可能脱离上下文但是对于通用类型推断,下面的一些线程建议升级到JDK9。 但由于它尚未发布,因此升级并不是一个可行的选择。 如果修复程序的后端移植到JDK8,那将是理想的选择。 这是在以下StackOverflow线程中请求的,但尚未得到Oracle团队的回复。 使用jOOQ 3.6 +,纯SQL和javac编译器进行慢速编译 我附上了两个关于堆在JDK7和JDK8中的外观截图。 这可能是导致JDK8放缓的原因吗? 谢谢! 更新20160314 Mapping类的转换器方法如下所示: public static ResponseItemVO convert (ResponseItem pArg0){ if(pArg0==null){ return null; } ResponseItemVO ret = new ResponseItemVO(); ret.setErrorDetails(pArg0.getErrorDetails()); ret.setResult(Mapping.convert(pArg0.getResult())); ret.setIdentifier(Mapping.convert(pArg0.getIdentifier())); return ret; } VO看起来像: public class ResponseItemVO extends ResultVO { public ResponseItemVO() {} } JDK7堆: JDK8堆:

使用Switch,减少圈复杂度java

在使用java时我遇到了一个奇怪的情况,让我们先从代码开始。 public static String constructMessage(final String reason, final String xId, final String yId, final IonStruct metadataStruct) throws DataSanityException { String message = “”; switch (reason) { case “NOT_ACTIVE”: if (xId != null) { message = String.format(“Y %s X %s not active: status is inactive%n”, yId, xId); } else { message = String.format(“Y %s not active: […]

Java 8:从纪元时间开始获取周数

给定LocalDate我想转换为自纪元以来的周数 一种方法是: LocalDate date = datePicker.getValue(); // input from your date picker Locale locale = Locale.US; int weekOfYear = date.get(WeekFields.of(locale).weekOfWeekBasedYear()); And X = find weeks since Epoch to prevYear And then result = X + weekOfYear 虽然我们可以找到“自纪元以来的周数”,但是有没有使用Java 8找到它的干净解决方案? 更新:即使上面的解决方案不会工作一周(总是从星期日开始)可能跨越两年

将SSLContext默认值替换为自己的实现和信任管理器

根据Jcs( HttpUnit WebConversation SSL问题 )的答案,我试图用自己的信任管理器替换SSLContext.getDefault() 。 SSLContext ssl = SSLContext.getDefault(); ssl.init(null, new X509TrustManager[]{new AnyTrustManager()}, null); ssl.setDefault(ssl); AnyTrustManager(): import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; public class AnyTrustManager implements X509TrustManager { X509Certificate[] client = null; X509Certificate[] server = null; public void checkClientTrusted(X509Certificate[] chain, String authType) { client = chain; } public void checkServerTrusted(X509Certificate[] chain, String authType) { server = […]

Group,Sum byType然后使用Java流获得diff

我想使用流来分组,按类型获取总和,然后按类型查找不同的结果。 所以这是我的数据集。 Sample(SampleId=1, SampleTypeId=1, SampleQuantity=5, SampleType=ADD), Sample(SampleId=2, SampleTypeId=1, SampleQuantity=15, SampleType=ADD), Sample(SampleId=3, SampleTypeId=1, SampleQuantity=25, SampleType=ADD), Sample(SampleId=4, SampleTypeId=1, SampleQuantity=5, SampleType=SUBTRACT), Sample(SampleId=5, SampleTypeId=1, SampleQuantity=25, SampleType=SUBTRACT) Sample(SampleId=6, SampleTypeId=2, SampleQuantity=10, SampleType=ADD), Sample(SampleId=7, SampleTypeId=2, SampleQuantity=20, SampleType=ADD), Sample(SampleId=8, SampleTypeId=2, SampleQuantity=30, SampleType=ADD), Sample(SampleId=9, SampleTypeId=2, SampleQuantity=15, SampleType=SUBTRACT), Sample(SampleId=10, SampleTypeId=2, SampleQuantity=35, SampleType=SUBTRACT) 我目前的做法是这样的: Map result = sampleList.stream() .collect( Collectors.groupingBy( Sample::getSampleTypeId, Collectors.summingInt(Sample::getSampleQuantity) ) ); 我的结果是这样的(SampleTypeId,result): {1=75, […]

Java编译器抱怨未报告的IOException

我正在尝试编写一个列出目录中所有非隐藏文件的方法。 但是,当我添加条件!Files.isHidden(filePath)我的代码将无法编译,并且编译器返回以下错误: java.lang.RuntimeException: Uncompilable source code – unreported exception java.io.IOException; must be caught or declared to be thrown 我试图捕获IOException ,但编译器仍然拒绝编译我的代码。 有什么明显的东西让我失踪吗? 代码如下。 try { Files.walk(Paths.get(root)).forEach(filePath -> { if (Files.isRegularFile(filePath) && !Files.isHidden(filePath)) { System.out.println(filePath); } }); } catch(IOException ex) { ex.printStackTrace(); } catch(Exception ex) { ex.printStackTrace(); }

java 8:LongAdder和LongAccumulator是AtomicLong的首选吗?

LongAdder作为AtomicLong的替代品 ExecutorService executor = Executors.newFixedThreadPool(2); IntStream.range(0, 1000) .forEach(i -> executor.submit(adder::increment)); stop(executor); System.out.println(adder.sumThenReset()); // => 1000 LongAccumulator是LongAccumulator的更通用版本 LongBinaryOperator op = (x, y) -> 2 * x + y; LongAccumulator accumulator = new LongAccumulator(op, 1L); ExecutorService executor = Executors.newFixedThreadPool(2); IntStream.range(0, 10) .forEach(i -> executor.submit(() -> accumulator.accumulate(i))); stop(executor); System.out.println(accumulator.getThenReset()); // => 2539 我有一些疑问。 LongAdder总是优先于AtomicLong吗? LongAccumulator是LongAdder和AtomicLong的首选吗?

为什么java编译器不报告Intellij中多播表达式的未经检查的强制转换警告?

为什么下面的代码没有报告Intellij IDEA与jdk 1.8.0_121未经检查的警告,因为Supplier & Serializable是T的超类型? <T extends Supplier & Serializable> T createdBy(AtomicInteger counter) { // v— if I removed the first cast expression, I can’t compile it return (T) (Supplier & Serializable) counter::incrementAndGet; // ^— it should be reports unchecked warnings, but it doesn’t } 并且以下代码报告了未经检查的强制转换警告: R apply(T value) { return (R) value; // ^— […]

Java Streams – 如何在每第n个项目中执行中间函数

我正在寻找一个Stream上的操作,使我能够每隔n项执行一次非终端(和/或终端)操作。 虽然我使用素数流,例如,流可以很容易地生成网络请求,用户操作或其他一些冷数据或实时源。 由此: Duration start = Duration.ofNanos(System.nanoTime()); IntStream.iterate(2, n -> n + 1) .filter(Findprimes::isPrime) .limit(1_000_1000 * 10) .forEach(System.out::println); System.out.println(“Duration: ” + Duration.ofNanos(System.nanoTime()).minus(start)); 对于像这样的流函数: IntStream.iterate(2, n -> n + 1) .filter(Findprimes::isPrime) .limit(1_000_1000 * 10) .peekEvery(10, System.out::println) .forEach( it -> {});