标签: java-8

流和不同的操作

我有以下代码:

class C
{
    String n;

    C(String n)
    {
        this.n = n;
    }

    public String getN() { return n; }

    @Override
    public boolean equals(Object obj)
    {
        return this.getN().equals(((C)obj).getN());
    }
 }

List<C> cc = Arrays.asList(new C("ONE"), new C("TWO"), new C("ONE"));

System.out.println(cc.parallelStream().distinct().count());
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么distinct返回3而不是2.

java java-8 java-stream

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

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

在java-8中解组xml时出错"安全处理org.xml.sax.SAXNotRecognizedException导致java.lang.IllegalStateException"

以下代码在Java 7中运行良好

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

String xmlString = '<xml ..... ';

StringReader reader = new StringReader(xmlString);

JAXBContext jc = JAXBContext.newInstance(MyClass.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
MyClass myClass = (MyClass) unmarshaller.unmarshal(reader);
....
Run Code Online (Sandbox Code Playgroud)

现在我们不得不升级到Java 8,现在我在执行代码时遇到了这个异常:

Sep 03, 2014 1:42:47 PM com.sun.xml.internal.bind.v2.util.XmlFactory createParserFactory
SCHWERWIEGEND: null
org.xml.sax.SAXNotRecognizedException: Feature: http://javax.xml.XMLConstants/feature/secure-processing
    at org.apache.xerces.jaxp.SAXParserFactoryImpl.setFeature(SAXParserFactoryImpl.java:100)
    at com.sun.xml.internal.bind.v2.util.XmlFactory.createParserFactory(XmlFactory.java:114)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.getXMLReader(UnmarshallerImpl.java:139)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:214)
Run Code Online (Sandbox Code Playgroud)

我知道,有一个问题,针对类似的问题,但退一步Java 7的是不是一个解决方案给我.

我试图添加以下maven依赖项

<dependency>
    <groupId>javax.xml</groupId>
    <artifactId>jaxp-api</artifactId>
    <version>1.4</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但这没有改变结果,所以我删除了它(感谢@BlaiseDoughan的信息,这包含在Java 6中)

欢迎任何提示,非常感谢.

java jaxb xml-parsing java-8

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

并行排序List而不在Java 8中创建临时数组

Java 8提供了java.util.Arrays.parallelSort使用fork-join框架并行排序数组的方法.但是没有相应Collections.parallelSort的排序列表.

我可以使用toArray,对该数组进行排序,并将结果存储在我的列表中,但这会暂时增加内存使用量,如果我使用并行排序已经很高,因为并行排序只能为巨额列表付出代价.而不是内存的两倍(列表加上parallelSort的工作内存),我正在使用三次(列表,临时数组和parallelSort的工作内存).(Arrays.parallelSort文档说"算法需要的工作空间不大于原始数组的大小".)

除了内存使用,Collections.parallelSort对于看起来像是一个相当常见的操作也会更方便.(我倾向于不直接使用数组,所以我肯定比Arrays.parallelSort更经常使用它.)

该库可以测试RandomAccess以避免尝试例如快速排序链表,因此这不能成为故意遗漏的原因.

如何在不创建临时数组的情况下并行对List进行排序?

java sorting java-8

30
推荐指数
3
解决办法
5302
查看次数

使用Java 8构造时Bean创建的ArrayOutOfBoundsException

我收到的ArrayIndexOutOfBoundsException时候我用Java 8特性的服务启动(创建bean).

Java 8已经建立并一直在运行.代码编译正确.在服务启动时,服务无法侦听端口,因为bean未创建.当我更改代码(删除java 8构造)时,服务启动,一切正常.

这是我正在使用的代码(服务启动的工作代码):

for (Item itemObject : response) {
    if (itemObject.hasId()) {
        idList.add(String.valueOf(itemObject.Id());
    }
}
Run Code Online (Sandbox Code Playgroud)

使用Java 8构造的相同代码:

response.parallelStream()
        .filter(itemObject -> itemObject.hasId())
        .map(itemObject -> itemObject.getId())
        .forEach(id -> idList.add(id));
Run Code Online (Sandbox Code Playgroud)

包含这段代码的类的bean是使用组件扫描创建的.

当使用第二个代码块代替第一个代码块时,以下是异常消息:

Exiting with throwable: java.lang.IllegalArgumentException: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/workspace/.../GetContainerIdForFcSkuAdapter.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 51880
 java.lang.IllegalArgumentException: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/workspace....Some.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 51880
Run Code Online (Sandbox Code Playgroud)

对我来说没有意义的是,为什么在创建bean时,函数内部的代码(不是bean类的构造函数)被覆盖.我问这个,因为当我使用普通for循环而不是并行流时,异常不存在.ArrayOutOfBoundsException当调用函数并且实际使用此代码时,不应该出现.

我该如何解决?

java spring javabeans indexoutofboundsexception java-8

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

递归使用Stream.flatMap()

考虑以下课程:

public class Order {

    private String id;

    private List<Order> orders = new ArrayList<>();

    @Override
    public String toString() {
        return this.id;
    }

    // getters & setters
}
Run Code Online (Sandbox Code Playgroud)

注意:重要的是要注意我无法修改此类,因为我正在从外部API中使用它.

还要考虑以下订单层次结构:

Order o1 = new Order();
o1.setId("1");
Order o11 = new Order();
o11.setId("1.1");
Order o111 = new Order();
o111.setId("1.1.1");
List<Order> o11Children = new ArrayList<>(Arrays.asList(o111));
o11.setOrders(o11Children);

Order o12 = new Order();
o12.setId("1.2");
List<Order> o1Children = new ArrayList<>(Arrays.asList(o11, o12));
o1.setOrders(o1Children);

Order o2 = new Order();
o2.setId("2");
Order o21 = new …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

如何在5年前获得

我是java 8的新手,我想要在五年之前获得,这是我的代码:

Instant fiveYearsBefore = Instant.now().plus(-5,
                    ChronoUnit.YEARS);
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Years
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我怎么做?

java-8

30
推荐指数
3
解决办法
9903
查看次数

在Intellij Idea中自动将所有匿名内部类替换为lambda

我正在研究一个在java 7中实现的项目,现在我想迁移到java 8.我使用Intellij Idea并找到所有"新内部类发生"的whit regex查找("new.(.)\ s*{[. |\s]*"),但那些数量非常多!如何强制Intellij替换所有这些内部类?

java lambda intellij-idea anonymous-class java-8

30
推荐指数
1
解决办法
6615
查看次数

Java 8将函数应用于Stream的所有元素,而不会破坏流链

在Java中是否有办法将函数应用于a的所有元素Stream而不破坏Stream链?我知道我可以打电话forEach,但那个方法会返回一个void,而不是一个Stream.

java chaining java-8 java-stream

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

为什么java中没有可选的公共构造函数?

为什么Optional有类似的方法of()ofNullable()不是公共构造函数?

java constructor optional java-8

30
推荐指数
4
解决办法
2343
查看次数