标签: java-8

重复方法,用Java8返回对象本身N次

我想以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)

但是到目前为止没有运气,尽管我认为这个问题非常普遍.

第一个想法是用它做reducegetParent()不是联想,不是吗?

第二个是使用,IntStream.range(0, depth)但我找不到用它来完成这项任务的方法.它适用于返回的方法void,就是这样.

提前致谢.

java lambda java-8

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

在Java 8中将字符串转换为LocalDateTime

如何在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)

java java-8

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

使用连续的短裤范围填充列表

/sf/answers/1657259201/为生成连续整数列表提供了一个很好的解决方案.看到JDK8没有提供ShortStream类,你会如何生成一个连续短裤列表?

我正在寻找以下内容:

List<Short> range = ShortStream.range(0, 500).boxed().collect(Collectors.toList());

其中输出包含一个从0到500(包括0和500)的短路列表.

java java-8 java-stream

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

Java 8,在流中使用.parallel会导致OOM错误

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)

java parallel-processing java-8 java-stream

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

Java 8仅映射到值类型集合

我想把我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))但是没有用.那我在这里错过了什么?

java lambda java-8 collectors

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

无法在Windows 8.1命令提示符下使用JDK 8启动jboss-as-7.1.1.Final

使用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 jboss7.x windows-8.1

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

spring boot + hibernate 5 + java 8 + ZonedDateTime = ImplicitNamingStrategy异常

我有一个利用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)

postgresql java-8 spring-boot hibernate-5.x

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

java 8中的Lambda表达式(使用java.util.Optional在HashMap中进行空检查)

我是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)

java lambda optional java-8

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

使用流来汇总存储在map中的数组中的所有值

我有一张看起来像这样的地图:

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表达式来做到这一点

java java-8 java-stream

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

按键字符串排序映射(其中键实际上是一个整数)

我正在尝试对地图进行排序以显示下拉列表.但我无法完成任何排序.这将返回一张新地图.但不是像我期望的那样用按键排序的地图.

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 sorting java-8

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