标签: java-8

项目facet java的1.8版本不存在

我正在尝试Dynamic Web Application使用Java 8(以及Wildfly appServer,如果这很重要)构建一个eclipse,但是我无法让Eclipse Luna M5使用Java 8(我确实安装了Java 8 BETA支持,它适用于JavaSE项目).

在我的POM中,我将级别设置为Java 8:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

但在我这样做后,maven -> update project我收到以下错误:

Could not update project ExampleApp configuration
Version 1.8 of project facet java does not exist.
Run Code Online (Sandbox Code Playgroud)

事实上,没有java 1.8项目方面 project->preferences->project facets->java

我可以手动创建这样的facet并将它添加到eclipse或者我将不得不等到java 8发布并且eclipse的人决定添加它吗?

java eclipse m2eclipse maven java-8

49
推荐指数
2
解决办法
6万
查看次数

Android Studio - 提供的javaHome不是有效的文件夹

我决定将我的JDK更新为Java 8,并安装到C:\Program Files\Java\jdk1.8.0带有jre子目录的默认位置.

我不确定Android Studio是如何计算出JDK的位置的,所以我决定启动它并查看.我收到以下消息:

无法完成Gradle执行.

原因:提供的javaHome不是有效的文件夹.您提供了:C:\ Program Files\Java\jdk1.7.0_45

我更新了我的JAVA_HOME环境变量(包括系统和用户)以指向新路径,并尝试将其添加到我的PATH变量,但每次我尝试在Android Studio中构建时,我都会得到相同的消息.引用的路径在我的环境变量中无处可寻,所以从哪里获取它以及如何更改它?

谢谢

java java-8 android-studio

49
推荐指数
3
解决办法
4万
查看次数

当.stream().parallel()做同样的事情时,为什么Collection.parallelStream()存在?

在Java 8中,Collection接口扩展了两个返回的方法Stream<E>:stream()返回一个顺序流,并parallelStream()返回一个可能并行的流.流本身也有一个parallel()返回等效并行流的方法(将当前流变为并行或创建新流).

复制有明显的缺点:

  • 这令人困惑.一个问题,如果parallelStream()可能返回顺序流,是否需要同时调用parallelStream().parallel()以确保流是并行的.如果无法保证parallelStream(),为什么会存在?反过来也是混乱 - 如果parallelStream()返回顺序流,则可能有一个原因(例如,并行流是性能陷阱的固有顺序数据结构); Stream.parallel()应该为这样的流做什么?(parallel()的规范不允许使用UnsupportedOperationException.)

  • 如果现有实现具有类似命名的方法且返回类型不兼容,则向接口添加方法会产生冲突.除了stream()之外,添加parallelStream()会使得收益微不足道的风险增加一倍.(注意,parallelStream()只是名为parallel(),但我不知道它是否被重命名以避免名称冲突或其他原因.)

为什么在调用Collection.stream()时才存在Collection.parallelStream().parallel()做同样的事情?

java java-8 java-stream

49
推荐指数
1
解决办法
5243
查看次数

布尔值流,是真的吗?

我想使用parallelStream并行化以下代码:

boolean anyTrue() {
  for (Element e : setOfE) {
    if (eval(e)) {
      return true;
    }
  }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

以下是否可以在并行流上使用并定期进行短路评估?

setOfE.parallelStream().map(e -> eval(e)).reduce(false, (a,b) -> a || b))
Run Code Online (Sandbox Code Playgroud)

java parallel-processing lambda java-8 java-stream

49
推荐指数
3
解决办法
4万
查看次数

如何反编译为java文件intellij的想法

IDEA有一个很棒的内置功能 - 反编译器.它工作得很好.我可以复制源代码,但我找不到将所有反编译的java类提取到java文件的选项.
这个项目有很多java类和包,所以我将长时间手动复制它.
有谁知道如何提取到java源文件.谢谢

java decompiling intellij-idea java-8

49
推荐指数
5
解决办法
9万
查看次数

用流映射的Java 8列表

我有一个List<Item>集合.我需要将其转换Map<Integer, Item> 为映射的键必须是集合中项的索引.我无法弄清楚如何使用流来做到这一点.就像是:

items.stream().collect(Collectors.toMap(...));
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

由于这个问题被确定为可能重复,我需要补充一点,我的具体问题是 - 如何获取列表中项目的位置并将其作为键值

java collections dictionary java-8 java-stream

49
推荐指数
4
解决办法
7万
查看次数

具有德语语言环境的SimpleDateFormat - Java 8与Java 10+

我在遗留应用程序中有代码和测试用例,可归纳如下:

@Test
public void testParseDate() throws ParseException {
    String toParse = "Mo Aug 18 11:25:26 MESZ +0200 2014";
    String pattern = "EEE MMM dd HH:mm:ss z Z yyyy";

    DateFormat dateFormatter = new SimpleDateFormat(pattern, Locale.GERMANY);
    Date date = dateFormatter.parse(toParse);

    //skipped assumptions
}
Run Code Online (Sandbox Code Playgroud)

该测试通过Java 8及以下版本.然而,随着Java 10向上,这导致了一个java.text.ParseException: Unparseable date: "Mo Aug 18 11:25:26 MESZ +0200 2014".

备案:另外de_DE,异常也抛出了语言环境 de_CH,de_AT,de_LU.

我知道使用JDK 9(JEP 252)更改了日期格式.但是,我认为这是破坏向后兼容性的颠覆性变化.摘录:

在JDK 9中,Unicode Consortium的公共区域设置数据存储库(CLDR)数据作为默认区域设置数据启用,因此您可以使用标准区域设置数据而无需任何进一步操作.

在JDK …

java simpledateformat java-8 java-9 java-10

49
推荐指数
1
解决办法
2700
查看次数

Java 8是否缺少Stream.concat处理流的varags?

目前我们Stream.concat在Java 8中有以下内容:

public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b);
Run Code Online (Sandbox Code Playgroud)

我很惊讶为什么没有版本采取varargs Stream<? extends T>

目前我的代码编写如下:

Stream<Integer> resultStream = Stream.concat(stream1, Stream.concat(stream2, Stream.of(element)))
        .filter(x -> x != 0)
        .filter(x -> x != 1)
        .filter(x -> x != 2);
Run Code Online (Sandbox Code Playgroud)

如果提供此签名的varargs:

public static <T> Stream<T> concat(Stream<? extends T>... streams);
Run Code Online (Sandbox Code Playgroud)

然后我可以更清楚地写出:

Stream<Integer> resultStream = Stream.concat(
                stream1,
                stream2,
                Stream.of(element)
        )
        .filter(x -> x != 0)
        .filter(x -> x != 1)
        .filter(x -> x != 2);
Run Code Online (Sandbox Code Playgroud)

没有各种嵌套Stream.concat调用.

还是有其他原因没有提供? …

java java-8 java-stream

48
推荐指数
3
解决办法
1万
查看次数

Java 8 Time API:如何将格式为"MM.yyyy"的字符串解析为LocalDate

我对Java 8 Time API中的日期解析感到有点气馁.

以前我可以轻松写:

String date = "04.2013";
DateFormat df = new SimpleDateFormat("MM.yyyy");
Date d = df.parse(date);
Run Code Online (Sandbox Code Playgroud)

但是现在如果我使用LocalDate并像这样做:

String date = "04.2013";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM.yyyy");
LocalDate ld = LocalDate.parse(date, formatter);
Run Code Online (Sandbox Code Playgroud)

我收到一个例外:

java.time.format.DateTimeParseException: Text '04' could not be parsed at index 0
java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1948)
java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1850)
java.time.LocalDate.parse(LocalDate.java:400)
java.time.LocalDate.parse(LocalDate.java:385)
com.luxoft.ath.controllers.JsonController.region(JsonController.java:38)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:483)
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
Run Code Online (Sandbox Code Playgroud)

如果我将字符串格式更改为"yyyy-MM-dd",即使没有格式化程序,一切也能正常工作:

String date = "2013-04-12";
LocalDate …
Run Code Online (Sandbox Code Playgroud)

java date java-8 java-time

48
推荐指数
2
解决办法
2万
查看次数

为什么Files.lines(和类似的Streams)不会自动关闭?

Stream的javadoc说明:

Streams有一个BaseStream.close()方法并实现AutoCloseable,但几乎所有的流实例实际上都不需要在使用后关闭.通常,只有源为IO通道的流(例如Files.lines(Path,Charset)返回的流)才需要关闭.大多数流都由集合,数组或生成函数支持,不需要特殊的资源管理.(如果流确实需要关闭,则可以在try-with-resources语句中将其声明为资源.)

因此,绝大多数情况下,人们可以在单行中使用Streams,collection.stream().forEach(System.out::println);但是对于Files.lines和其他资源支持的流,必须使用try-with-resources语句或泄漏资源.

这让我觉得容易出错并且不必要.因为Streams只能迭代一次,所以在我看来,没有一个迭代后Files.lines不应该关闭输出的情况,因此实现应该只是在任何终端操作结束时隐式调用close .我错了吗?

java stream resource-leak java-8 java-stream

48
推荐指数
3
解决办法
9075
查看次数