Tag: java 8

如何使用Java 8 Stream将Array转换为HashMap

我正在编写一个函数,使用Java 8 Stream将数组转换为Map。 这就是我想要的 public static Map toMap(Object… entries) { // Requirements: // entries must be K1, V1, K2, V2, …. ( even length ) if (entries.length % 2 == 1) { throw new IllegalArgumentException(“Invalid entries”); } // TODO Arrays.stream(entries).???? } 有效的用法 Map map1 = toMap(“k1”, 1, “k2”, 2); Map map2 = toMap(“k1”, “v1”, “k2”, […]

来自并行流中的I / O代码的SecurityException

我无法解释这一点,但我在其他人的代码中发现了这种现象: import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Files; import java.util.stream.Stream; import org.junit.Test; public class TestDidWeBreakJavaAgain { @Test public void testIoInSerialStream() { doTest(false); } @Test public void testIoInParallelStream() { doTest(true); } private void doTest(boolean parallel) { Stream stream = Stream.of(“1”, “2”, “3”); if (parallel) { stream = stream.parallel(); } stream.forEach(name -> { try { Files.createTempFile(name, “.dat”); } […]

为什么我可以将并行流收集到任意大型数组而不是顺序流?

从回答这个问题开始 ,我遇到了一个奇特的特征。 下面的代码按照我的假设工作(现有数组中的前两个值将被覆盖): Integer[] newArray = Stream.of(7, 8) .parallel() .toArray(i -> new Integer[] {1, 2, 3, 4, 5, 6}); System.out.println(Arrays.toString(newArray)); 输出: [7, 8, 3, 4, 5, 6] 但是,使用顺序流尝试此操作会抛出IllegalStateException : Integer[] newArray = Stream.of(7, 8) .toArray(i -> new Integer[] {1, 2, 3, 4, 5, 6}); System.out.println(Arrays.toString(newArray)); 输出: Exception in thread “main” java.lang.IllegalStateException: Begin size 2 is […]

使用Lambdas时,Maven插件构建失败

我写了一个maven插件/ mojo来生成一些代码。 该插件运行良好,并使用Java JDK 1.8构建。 我看到了一些奇怪的行为:它构建,安装等等,如果我使用1.8之前的语法,但是只要我使用Java 8 Lambda表达式,我在执行mvn clean install时会收到以下错误: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor) on project my-maven-plugin: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor failed: 13557 -> [Help 1] 这是我的pom: 4.0.0 com.my.group.id my-maven-plugin maven-plugin 1.0-SNAPSHOT My Maven Mojo http://maven.apache.org 4.0.1.RELEASE 2.3 org.apache.maven.plugins maven-compiler-plugin 3.2 1.8 1.8 org.apache.maven.plugins maven-plugin-plugin 3.2 true mojo-descriptor descriptor inin-release ININ […]

JDK8:无法解析LocalTime

我设法将String解析为LocalDate对象: DateTimeFormatter f1=DateTimeFormatter.ofPattern(“dd MM yyyy”); LocalDate d=LocalDate.parse(“26 08 1984”,f1); System.out.println(d); //prints “1984-08-26” 但我不能对LocalTime做同样的事情。 这段代码: DateTimeFormatter f2=DateTimeFormatter.ofPattern(“hh mm”); LocalTime t=LocalTime.parse(“11 08”,f2); //exception here System.out.println(t); 抛出DateTimeParseException : Exception in thread “main” java.time.format.DateTimeParseException: Text ’11 08′ could not be parsed: Unable to obtain LocalTime from TemporalAccessor: {MinuteOfHour=8, HourOfAmPm=11},ISO of type java.time.format.Parsed at java.time.format.DateTimeFormatter.createError(Unknown Source) at java.time.format.DateTimeFormatter.parse(Unknown Source) at […]

Eclipse – 安装新的JRE(Java SE 8 1.8.0)

我正在尝试安装Java 8。 到目前为止我做了什么: 安装了最新版本的Eclipse 下载并安装了Java SE Runtime Environment 8 http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html 试图按照这个 – > 将eclipse升级到java 8而没有一个圆满的结局 我创建项目时得到的错误: 未绑定的类路径容器:项目“JackTest”构建路径问题中的“JRE系统库[JavaSE-1.8]” 任何想法? 有人能告诉我一步一步做什么吗?

仅在存在时打开可选项

所以目前我有 String uri = website.getUri(); Optional pageDetail = webClient.getDetailOfUri(uri); String displayName; String description; if (pageDetail.isPresent()) { displayName = pageDetail.get().getName(); description = pageDetail.get().getDescription(); } else { displayName = uri; description = “”; } 我正在调用getDetailOfUri(uri)方法,它返回一个Optional ,我想将字符串displayName和description设置为PageDetail对象字段的值(如果存在)。 否则,我想将其设置为某些默认值。 我的问题是,有没有更好的方法来重写这个? 我目前的代码似乎有点冗长乏味,我想知道是否有更简洁的方法来做到这一点。

使用Java 8集合流API进行堆栈

我有一个方法,每次执行它时都会生成一个对象,我需要颠倒我获取它们的顺序。 所以我认为这样做的自然方式是Stack,因为它是LIFO。 但是,Java Stack似乎不能与新的Java 8流API一起使用。 如果我这样做: Stack stack = new Stack(); stack.push(“A”); stack.push(“B”); stack.push(“C”); List list = stack.stream().collect(Collectors.toList()); System.out.println(“Collected: ” + list); 我得到的输出是: Collected: [A, B, C] 为什么不以预期的LIFO顺序将它们输出到流中? 这是将所有项目从堆栈清除到右(LIFO)订单列表的正确方法吗?

如何在Spring中使用EnableScheduling注释在运行时重新启动计划任务?

我一直在研究如何使用Java 8和spring更改运行时作业的频率。 这个问题非常有用,但并没有完全解决我的问题。 我现在可以配置下一次应该执行作业的日期。 但是如果将延迟设置为1年,那么我需要在考虑新配置之前等待1年。 我的想法是在配置值发生变化时停止计划任务(所以从另一个类开始)。 然后在下次执行任务时重新计算。 也许有一种更简单的方法可以做到这一点。 这是我到目前为止的代码。 @Configuration @EnableScheduling public class RequestSchedulerConfig implements SchedulingConfigurer { @Autowired SchedulerConfigService schedulerConfigService; @Bean public RequestScheduler myBean() { return new RequestScheduler(); } @Bean(destroyMethod = “shutdown”) public Executor taskExecutor() { return Executors.newScheduledThreadPool(100); } @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setScheduler(taskExecutor()); taskRegistrar.addTriggerTask( new Runnable() { @Override public void run() { […]

获取LocalDate的周数(Java 8)

我正在尝试使用以下格式获取完整LocalDate的周数: dd.MM.yyy 我还没有在Java 8 Date API中找到一个返回Week Number的函数,我试图创建一个算法,但它没有用。