标签: java-8

AspectJ和Java8 - 操作数堆栈上的错误类型

看看这个Eclipse Bug似乎Java Verifier(自1.6起)与ApsectJ存在问题.

错误说AspectJ 1.8.1将解决问题.但是在Java8u11中使用它仍然会得到验证错误.

我在STS 3.6.0(Eclipse 4.4)下运行JUnit4.我相信这个配置是所有软件包中最新的.

用请求的示例完全替换了剩下的文本.这似乎仅限于@Around建议. @Before工作正常.

JUnit的:

package com.test.aspectjdemo.junit;

import static org.junit.Assert.*;
import org.junit.Test;
import com.test.aspectjdemo.domain.AspectTarget;

public class AspectTargetTest {

    @Test
    public void testFirstMethod() throws Throwable {
        AspectTarget aspectTarget = new AspectTarget();
        aspectTarget.firstMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

Vmarg:-javaagent:C:.... m2\repository\org\aspectj\aspectjweaver\1.8.1\aspectjweaver-1.8.1.jar

正在测试的类(我有一些问题,因为显然声明它抛出Throwable,这是有道理的,但这个简单的测试没有抛出任何东西.所以我添加了一个虚假的异常使它编译:

package com.test.aspectjdemo.domain;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class AspectTarget {

    final Logger logger = LogManager.getLogger();

    int x = 1;

    public void firstMethod() throws Throwable {
        logger.info("Start First Method");
        x = secondMethod(x);
        logger.info("Exit X is {}", x); …
Run Code Online (Sandbox Code Playgroud)

aspectj load-time-weaving java-8

2
推荐指数
1
解决办法
1661
查看次数

Java 8流和lambdas是否具有欺骗性?

我一直在使用Java 8的lambdas和流,因为我的硕士学位项目和我注意到一些在互联网上没有广泛讨论的东西.我正在使用Netbeans进行开发,并且多次建议改变"老式"风格,转而使用这两种新构造器.但我想知道这些建议是否真的有用.要点是:

  • 易读性

也许是一个习惯问题,但如果你使用嵌套的lambdas,它可能成为了解发生了什么的噩梦.

  • 可测性

由于Netbeans的建议,我们倾向于将for循环更改为流的foreach调用,但是在可测试性方面存在微妙但非常危险的副作用.如果你的代码在foreach块中失败,那么IDE(实际上是编译器)根本不知道错误发生在哪一行,指向块的开始.此外,调试代码更加困难,因为我们无法控制计算和内部循环.

  • 性能

同样,IDE总是建议将累积更改为一种map reduce算法.后者看起来更复杂,所以我创建了一个简单的测试来检查这种方法有多好.惊喜,它慢得多!

那是代码:

public class Java8Kata {

public static void main(String[] args) {

    System.out.println("Generating random numbers...");
    final Collection<Number> numbers = getRandomNumbers();

    System.out.println("Starting comparison...");

    for (int i = 0; i < 20; i++) {
        getTotalConventionalStyle(numbers);
        getTotalNewStyle(numbers);
    }
}

public static void getTotalConventionalStyle(Collection<Number> numbers) {

    long startTime = System.nanoTime();
    System.out.println("\n\nstarting conventional...");
    double total = 0;
    for (Number number : numbers) {
        total += number.doubleValue();
    }
    System.out.println("total = " + total);

    System.out.println("finish conventional:" + …
Run Code Online (Sandbox Code Playgroud)

lambda java-8 java-stream

2
推荐指数
1
解决办法
429
查看次数

在流中存储新实例

如果我有一个对象流,我可以把它变成另一个对象的集合吗?所以,如果我有一个字符串集合,我可以把它变成一个人的集合吗?就像是:

strings.stream().forEach((string) -> {new Person(string);}).collect(Collectors.toList());

public class Person{
private String name;

Person(String name){
this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

java collections for-loop java-8 java-stream

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

为什么我的Spring Data MongoDB存储库在升级到最新版本后无法引导?

我最近将一个小项目更新为Java 8.该项目使用spring-data-mongodb.我将所有spring依赖版本升级到最新的稳定版本.spring-data-mongodb正在运行1.5.2.RELEASE.

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-mongodb</artifactId>
  <version>1.5.2.RELEASE</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

每当我启动服务时,我都会获得java.lang.Object的MappingException.

这是堆栈跟踪:

15:21:51.177 [main] ERROR o.s.web.servlet.DispatcherServlet - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pageableIdsRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.model.MappingException: Could not lookup mapping metadata for domain class java.lang.Object!
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:684) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) ~[spring-context-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) ~[spring-context-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658) …
Run Code Online (Sandbox Code Playgroud)

java-8 spring-data spring-data-mongodb

2
推荐指数
1
解决办法
3030
查看次数

如何将"嵌套为每个"转换为Java 8 Lambda/Stream构造?

如何转换以下代码块:

List<ExecutableElement> methods = ...
List<ExecutableElement> hiddens = new ArrayList<>();
for (ExecutableElement hider : methods) {
  for (ExecutableElement hidden : methods) {
    if (elements.hides(hider, hidden) || elements.overrides(hider, hidden, type)) {
      hiddens.add(hidden);
    }
  }
}
methods.removeAll(hiddens);
Run Code Online (Sandbox Code Playgroud)

变成这样的东西:

methods.removeAll(methods.stream().filter(... ...().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

java collections lambda java-8 java-stream

2
推荐指数
1
解决办法
2920
查看次数

JavaFX NoClassDefFoundError

我之前安装了JDK 8,使用WebView,但是我收到了一个错误.错误是这样的:

Exception in thread "main" java.lang.NoClassDefFoundError: 
javafx/embed/swing/JFXPanel
Run Code Online (Sandbox Code Playgroud)

我不知道为什么Swing没有嵌入到JDK 8的JavaFX中,但是有谁知道如何解决这个问题?

[java -version输出]

java版"1.8.0_11"Java(TM)SE运行时环境(版本1.8.0_11-b12)Java HotSpot(TM)64位服务器VM(版本25.11-b03,混合模式)

问题解决了,我只需要在运行配置中检查是否使用了正确的JRE.

另一个问题.它说"源没有附加"(我认为jfxrt.jar不在那里应该是什么.)有什么建议吗?

javafx noclassdeffounderror java-8

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

Java 8 - Streams嵌套ForEach与不同的Collection

我尝试了解新的Java 8 Streams,并且我尝试了几天将嵌套的foreach循环转移到Java 8 Streams中的集合上.

是否有可能重构以下嵌套的foreach循环,包括Java-8-Streams中的if-conditions?

如果是的话会是什么样子.

ArrayList<ClassInq> Inq = new ArrayList<>();
TreeMap<String, SalesQuot> Quotations = new TreeMap<>();

ArrayList<ClassInq> tempInqAndQuot = new ArrayList<>();
ArrayList<SalesQuot> tempQuotPos = new ArrayList<>();   

for(ClassInq simInq : this.Inq) {
    if(!simInq.isClosed() && !simInq.isDenied()) {
        for(Map.Entry<String, SalesQuot> Quot: Quotations.entrySet()) {

            SalesQuot sapQuot = Quot.getValue();

            if(sapQuot.getInquiryDocumentNumber().compareTo(simInq.getSapInquiryNumber()) == 0) {

                simInq.setSAPQuotationNumber(sapQuot.getQuotationDocumentNumber());
                tempInqAndQuot.add(simInq);

                for(Map.Entry<String, SalesQuotPosition> quotp : sapQuot.getPosition().entrySet()) {
                    tempQuotPos.add(quotp.getValue());
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢你的帮助.

BR

java collections foreach java-8 java-stream

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

为什么不能并行减少流的流?/ stream已经被操作或关闭

上下文

我偶然发现了一个相当烦人的问题:我有一个包含大量数据源的程序,它能够传输相同类型的元素,并且我想"映射"程序中的每个可用元素(元素顺序不物).

因此我试图将我Stream<Stream<T>> streamOfStreamOfT;简化为简单的Stream<T> streamOfT;使用streamOfT = streamOfStreamOfT.reduce(Stream.empty(), Stream::concat);

由于元素顺序对我来说并不重要,我尝试将reduce操作并行化为.parallel():streamOfT = streamOfStreamOfT.parallel().reduce(Stream.empty(), Stream::concat);但是这会触发一个java.lang.IllegalStateException: stream has already been operated upon or closed

要亲自体验它,只需通过注释/取消注释即可使用以下主要内容(java 1.8u20) .parallel()

public static void main(String[] args) {
    // GIVEN
    List<Stream<Integer>> listOfStreamOfInts = new ArrayList<>();
    for (int j = 0; j < 10; j++) {
        IntStream intStreamOf10Ints = IntStream.iterate(0, i -> i + 1)
                .limit(10);
        Stream<Integer> genericStreamOf10Ints = StreamSupport.stream(
                intStreamOf10Ints.spliterator(), true);
        listOfStreamOfInts.add(genericStreamOf10Ints);
    }
    Stream<Stream<Integer>> streamOfStreamOfInts = listOfStreamOfInts
            .stream(); …
Run Code Online (Sandbox Code Playgroud)

java parallel-processing java-8 java-stream

2
推荐指数
1
解决办法
1963
查看次数

faq about Java8 java.lang.invoke.LambdaForm

试图缩小java swing程序的jre大小.使用以下命令打印所有已加载的类:

java -jar -verbose:class demo.jar >>class.txt
Run Code Online (Sandbox Code Playgroud)

在结果中,我看到一些我不知道它在哪里的东西.我正在使用jre8,以下是:

[Loaded java.lang.invoke.LambdaForm$DMH/603742814 from java.lang.invoke.LambdaForm]
[Loaded java.lang.invoke.LambdaForm$LFI/1067040082 from java.lang.invoke.LambdaForm]
[Loaded java.lang.invoke.LambdaForm$LFI/1325547227 from java.lang.invoke.LambdaForm]
[Loaded java.lang.invoke.LambdaForm$NFI/980546781 from java.lang.invoke.LambdaForm]
Run Code Online (Sandbox Code Playgroud)

java.lang.invoke.LambdaForm $ NFI和java.lang.invoke.LambdaForm $ DMH和java.lang.invoke.LambdaForm $ LFI代表什么?我检查rt.jar中的类.它没有这些类或内部类.任何的想法?谢谢!

java lambda swing jvm java-8

2
推荐指数
1
解决办法
1638
查看次数

Java 8 Stream API收集器问题

我正在遍历图形的边缘,并希望得到所有源和目标的列表.这是我到目前为止:

public Set<Vertex> getVertices(){

    Set<Vertex> vertices = this.edges.stream().map(edge -> edge.getSource()).collect(Collectors.toSet());
    vertices.addAll(this.edges.stream().map(edge -> edge.getTarget()).collect(Collectors.toSet()));
    return vertices;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在同一个映射/收集步骤中获取源和目标?像(PSEUDO-CODE)这样的东西:

edges.stream().collect(edge.getSource()).collect(edge.getTarget())
Run Code Online (Sandbox Code Playgroud)

或普通的旧Java 7

for ( Edge e : edges ){
    vertices.add(e.getSource());
    vertices.add(e.getTarget());
}
Run Code Online (Sandbox Code Playgroud)

干杯,丹尼尔

java java-8 java-stream collectors

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