我有以下代码:
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 EE容器中生成线程.是否也不鼓励在Java EE中使用可能产生线程的Java 8并行流?
以下代码在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 8提供了java.util.Arrays.parallelSort使用fork-join框架并行排序数组的方法.但是没有相应Collections.parallelSort的排序列表.
我可以使用toArray,对该数组进行排序,并将结果存储在我的列表中,但这会暂时增加内存使用量,如果我使用并行排序已经很高,因为并行排序只能为巨额列表付出代价.而不是内存的两倍(列表加上parallelSort的工作内存),我正在使用三次(列表,临时数组和parallelSort的工作内存).(Arrays.parallelSort文档说"算法需要的工作空间不大于原始数组的大小".)
除了内存使用,Collections.parallelSort对于看起来像是一个相当常见的操作也会更方便.(我倾向于不直接使用数组,所以我肯定比Arrays.parallelSort更经常使用它.)
该库可以测试RandomAccess以避免尝试例如快速排序链表,因此这不能成为故意遗漏的原因.
如何在不创建临时数组的情况下并行对List进行排序?
我收到的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当调用函数并且实际使用此代码时,不应该出现.
我该如何解决?
考虑以下课程:
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 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 7中实现的项目,现在我想迁移到java 8.我使用Intellij Idea并找到所有"新内部类发生"的whit regex查找("new.(.)\ s*{[. |\s]*"),但那些数量非常多!如何强制Intellij替换所有这些内部类?
在Java中是否有办法将函数应用于a的所有元素Stream而不破坏Stream链?我知道我可以打电话forEach,但那个方法会返回一个void,而不是一个Stream.
为什么Optional有类似的方法of()而ofNullable()不是公共构造函数?
java-8 ×10
java ×9
java-stream ×4
chaining ×1
constructor ×1
ejb ×1
java-ee ×1
javabeans ×1
jaxb ×1
lambda ×1
optional ×1
sorting ×1
spring ×1
xml-parsing ×1