我想以Java 8风格实现以下代码:
public Path getSomeParent(Path path, int depth) {
Path someParent = path;
for (int i = 0; i < depth; i++) {
someParent = someParent.getParent();
}
return someParent;
}
Run Code Online (Sandbox Code Playgroud)
但是到目前为止没有运气,尽管我认为这个问题非常普遍.
第一个想法是用它做reduce但getParent()不是联想,不是吗?
第二个是使用,IntStream.range(0, depth)但我找不到用它来完成这项任务的方法.它适用于返回的方法void,就是这样.
提前致谢.
如何在Java 8中将字符串"23:00"转换为LocalDateTime?这似乎不起作用,
LocalDateTime dateTime1 = LocalDateTime.parse("23:00", DateTimeFormatter.ofPattern("HH:mm"));
Run Code Online (Sandbox Code Playgroud)
这是抛出的异常,
java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO resolved to 23:00 of type java.time.format.Parsed
Run Code Online (Sandbox Code Playgroud) /sf/answers/1657259201/为生成连续整数列表提供了一个很好的解决方案.看到JDK8没有提供ShortStream类,你会如何生成一个连续短裤列表?
我正在寻找以下内容:
List<Short> range = ShortStream.range(0, 500).boxed().collect(Collectors.toList());
其中输出包含一个从0到500(包括0和500)的短路列表.
在Java 8 In Action,7.1.1节中,作者声明通过添加函数,流可以从并行处理中受益.parallel().它们提供了一种简单的方法parallelSum(int)来说明这一点.我很好奇它看起来有多好,所以我执行了这段代码:
package lambdasinaction.chap7;
import java.util.stream.Stream;
public class ParallelPlay {
public static void main(String[] args) {
System.out.println(parallelSum(100_000_000));
}
public static long parallelSum(long n) {
return Stream.iterate(1L, i -> i + 1)
.limit(n)
.parallel()
.reduce(0L, Long::sum);
}
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,我收到了这个错误:
Exception in thread "main" java.lang.OutOfMemoryError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.util.concurrent.ForkJoinTask.getThrowableException(Unknown Source)
at java.util.concurrent.ForkJoinTask.reportException(Unknown Source)
at java.util.concurrent.ForkJoinTask.invoke(Unknown Source)
at java.util.stream.SliceOps$1.opEvaluateParallelLazy(Unknown Source)
at java.util.stream.AbstractPipeline.sourceSpliterator(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown …Run Code Online (Sandbox Code Playgroud) 我想把我Map <K,V>变成一个Set <V>.我在任何地方都找不到任何示例,包括Oracle的文档:https:
//docs.oracle.com/javase/tutorial/collections/streams/reduction.html
我所能做的更多就是:
myMap.entrySet().parallelStream().
filter((entry) -> entry.getKey().startsWith("a"))
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
这将返回一组Map.Entry.在这个例子中它是Map<String, String>这样我只希望它返回值bit(String),我已经尝试过.collect(Collectors.toSet(HashMap::getValue))但是没有用.那我在这里错过了什么?
使用standalone.bat,在命令提示符下显示如下:
D:\jboss-as-7.1.1.Final\bin>"C:\Program Files\Java\jdk1.8.0_45\bin\java" -XX:+TieredCompilation -Dprogram.name=standalone.bat -Xms
64M -Xmx512M -XX:MaxPermSize=256M -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.net.prefe
rIPv4Stack=true -Dorg.jboss.resolver.warning=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djboss.server.default.config=stan
dalone.xml "-Dorg.jboss.boot.log.file=D:\jboss-as-7.1.1.Final\standalone\log\boot.log" "-Dlogging.configuration=file:D:\jboss-as
-7.1.1.Final\standalone/configuration/logging.properties" -jar "D:\jboss-as-7.1.1.Final\jboss-modules.jar" -mp "D:\jboss-a
s-7.1.1.Final\modules" -jaxpmodule "javax.xml.jaxp-provider" org.jboss.as.standalone -Djboss.home.dir="D:\jboss-as-7.
1.1.Final"
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256M; support was removed in 8.0
01:43:23,386 INFO [org.jboss.modules] JBoss Modules version 1.1.1.GA
01:43:23,558 INFO [org.jboss.msc] JBoss MSC version 1.0.2.GA
01:43:23,605 INFO [org.jboss.as] JBAS015899: JBoss AS 7.1.1.Final "Brontes" starting
01:43:24,949 INFO [org.xnio] XNIO Version 3.0.3.GA
01:43:24,949 INFO [org.jboss.as.server] JBAS015888: Creating http management …Run Code Online (Sandbox Code Playgroud) 我有一个利用java 8的spring boot应用程序,到目前为止已经使用了hibernate 4.然而,我需要更改模型的一部分以包含java8提供的新ZonedDateTime类,即我需要一个数据时间类型,它为utc提供时间实例以及偏移量和时区.出于这个原因,我想拥有原生的hibernate 5支持.我在我的pom中更换了部件:
//<dependency>
// <groupId>org.hibernate</groupId>
// <artifactId>hibernate-core</artifactId>
// <version>4.3.10.Final</version>
//</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
<version>5.0.0.CR2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我已经在我的SpringPercisence配置类中更改为使用hibernate 5而不是hibernate 4 ie
@Bean
public org.springframework.orm.hibernate5.LocalSessionFactoryBean sessionFactory() {
// org.springframework.orm.hibernate4.LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
org.springframework.orm.hibernate5.LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(this.dataSource());
sessionFactory.setPackagesToScan("org.test");
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
// public org.springframework.orm.hibernate4.HibernateTransactionManager transactionManager() {
public org.springframework.orm.hibernate5.HibernateTransactionManager transactionManager() {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory().getObject());
return txManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
@Bean
public Properties hibernateProperties() {
return new Properties() …Run Code Online (Sandbox Code Playgroud) 我是java 8的新手并且学习lambda表达式.
我有一个界面.
Configuration.java
package com.raghu.example;
import java.util.Map;
public interface Configuration {
public Map<String,String> getPayload();
}
Run Code Online (Sandbox Code Playgroud)
Impl用于接口:ConfigurationImpl.java
package com.raghu.example;
import java.util.HashMap;
import java.util.Map;
public class ConfigurationImpl implements Configuration {
@Override
public Map<String, String> getPayload() {
Map<String,String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
//return null;
return map;
}
}
Run Code Online (Sandbox Code Playgroud)
我的主程序:Sample.java
package com.raghu.example;
import java.util.Optional;
public class Sample {
Configuration config;
/*
* if config is null, return "";
* if config.getPaylaod is null, return "";
* if config.payload is …Run Code Online (Sandbox Code Playgroud) 我有一张看起来像这样的地图:
Map<String,String[]> urlFormEncoded = new HashMap<String,String[]>();
Run Code Online (Sandbox Code Playgroud)
我想将存储在String []数组中的所有值作为double值求和,我试过这样的事情:
double requestAmount = urlFormEncoded.entrySet().stream().mapToDouble(k -> Arrays.stream(k.getValue()).).sum();
Run Code Online (Sandbox Code Playgroud)
但不幸的是我不知道如何将此String []转换为值:(我想使用流和lambda表达式来做到这一点
我正在尝试对地图进行排序以显示下拉列表.但我无法完成任何排序.这将返回一张新地图.但不是像我期望的那样用按键排序的地图.
private Map<String, String> mapInstrumentIDs = new TreeMap<>();
Map<Object, Object> val = mapInstrumentIDs
.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)
我当然没有想到密钥实际上是一个整数.这意味着将其排序为字符串不会给我预期的结果(作为整数排序).将键更改为Integer并转换该值将产生预期结果.
java-8 ×10
java ×8
java-stream ×3
lambda ×3
collectors ×1
jboss7.x ×1
optional ×1
postgresql ×1
sorting ×1
spring-boot ×1
windows-8.1 ×1