标签: java-8

相当于Java 8 Date和Time API中的jodatime Interval

Java 8处理时间的方式似乎已经有了很大改进,我开始考虑在某些情况下替换jodatime.但我缺少的是等同于Interval类.

我还没有深入挖掘Java 8,所以我可能错过了那里的东西.有没有人有关于如何最好地处理间隔的想法?

jodatime java-8

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

如何使用Java 8流映射到多个元素?

我有一个这样的课:

class MultiDataPoint {
  private DateTime timestamp;
  private Map<String, Number> keyToData;
}
Run Code Online (Sandbox Code Playgroud)

我想为每个MultiDataPoint生成

class DataSet {
        public String key;    
        List<DataPoint> dataPoints;
}

class DataPoint{
  DateTime timeStamp;
  Number data;
}
Run Code Online (Sandbox Code Playgroud)

当然,在多个MultiDataPoints中,"key"可以是相同的.

所以给定一个List<MultiDataPoint>,我如何使用Java 8流转换为List<DataSet>

这就是我目前在没有流的情况下进行转换的方式:

Collection<DataSet> convertMultiDataPointToDataSet(List<MultiDataPoint> multiDataPoints)
{

    Map<String, DataSet> setMap = new HashMap<>();

    multiDataPoints.forEach(pt -> {
        Map<String, Number> data = pt.getData();
        data.entrySet().forEach(e -> {
            String seriesKey = e.getKey();
            DataSet dataSet = setMap.get(seriesKey);
            if (dataSet == null)
            {
                dataSet = new DataSet(seriesKey);
                setMap.put(seriesKey, dataSet);
            }
            dataSet.dataPoints.add(new DataPoint(pt.getTimestamp(), …
Run Code Online (Sandbox Code Playgroud)

java lambda closures java-8 java-stream

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

如何在Java 8 stream forEach中使用if-else逻辑

我想要做的是在下面的2个流调用中显示.我想根据某些条件将一个集合拆分为两个新集合.理想情况下,我想在1中进行.我已经看到了用于.map函数的条件,但找不到forEach的任何内容.实现我想要的最好方法是什么?

    animalMap.entrySet().stream()
            .filter(pair-> pair.getValue() != null)
            .forEach(pair-> myMap.put(pair.getKey(), pair.getValue()));

    animalMap.entrySet().stream()
            .filter(pair-> pair.getValue() == null)
            .forEach(pair-> myList.add(pair.getKey()));
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

41
推荐指数
4
解决办法
13万
查看次数

在Java 8中将Null安全集合为Stream

我正在寻找可以使收集流,但是是安全的方法.如果collection为null,则返回空流.像这样:

Utils.nullSafeStream(collection).filter(...);
Run Code Online (Sandbox Code Playgroud)

我创建了自己的方法:

public static <T> Stream<T> nullSafeStream(Collection<T> collection) {
    if (collection == null) {
        return Stream.empty();
    }
    return collection.stream();
}
Run Code Online (Sandbox Code Playgroud)

但我很好奇,如果标准JDK中有这样的东西?

java collections null java-8 java-stream

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

类已由更新版本的Java环境编译

运行selenium脚本时,我在Eclipse控制台中收到以下错误消息:

类已由更新版本的Java环境(类文件版本53.0)编译,此版本的Java Runtime仅识别最高为52.0的类文件版本.

Java版本:8
IDE:Eclipse Oxygen
Firefox版本:46

java eclipse firefox selenium java-8

41
推荐指数
10
解决办法
12万
查看次数

lambda和运行时级别的方法引用有什么区别?

我遇到过使用方法引用但没有使用lambdas的问题.该代码如下:

(Comparator<ObjectNode> & Serializable) SOME_COMPARATOR::compare
Run Code Online (Sandbox Code Playgroud)

或者,与lambda,

(Comparator<ObjectNode> & Serializable) (a, b) -> SOME_COMPARATOR.compare(a, b)
Run Code Online (Sandbox Code Playgroud)

从语义上讲,它是完全相同的,但实际上它是不同的,因为在第一种情况下,我在其中一个Java序列化类中得到一个异常.我的问题不是关于这个例外,因为实际的代码是在一个更复杂的上下文中运行的,这个上下文已经被证明在序列化方面有奇怪的行为,所以如果我提供更多的细节,它会让它太难以回答.

我想要了解的是这两种创建lambda表达式的方法之间的区别.

java lambda serialization java-8

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

如何计算一段时间内的天数?

对于以下Period计算:

Period.between(LocalDate.of(2015, 8, 1), LocalDate.of(2015, 9, 2))
Run Code Online (Sandbox Code Playgroud)

结果是:

P1M1D
Run Code Online (Sandbox Code Playgroud)

这相当于31天+ 1天= 32天.

为此Period:

Period.between(LocalDate.of(2015, 8, 1), LocalDate.of(2015, 10, 2))
Run Code Online (Sandbox Code Playgroud)

结果是:

P2M1D
Run Code Online (Sandbox Code Playgroud)

这相当于:31天(8月)+ 30天(9月)+ 1(10月)= 62天

包中是否有一个方法java.time可以给出一个天数Period?我找不到一个.不确定我是否忽略了任何东西,或者它是否只是在那里.

java java-8

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

具有多个语句的Java 8 Lambda Stream forEach

我还在学习Lambda,请原谅我如果我做错了什么

final Long tempId = 12345L;
List<Entry> updatedEntries = new LinkedList<>();

for (Entry entry : entryList) {
    entry.setTempId(tempId);
    updatedEntries.add(entityManager.update(entry, entry.getId()));
}

//entryList.stream().forEach(entry -> entry.setTempId(tempId));
Run Code Online (Sandbox Code Playgroud)

似乎forEach只能为一个语句执行.它不会返回更新的流或函数以进一步处理.我可能完全选择了错误的一个.

有人可以指导我如何有效地做到这一点?

还有一个问题,

public void doSomething() throws Exception {
    for(Entry entry: entryList){
        if(entry.getA() == null){
            printA() throws Exception;
        }
        if(entry.getB() == null){
            printB() throws Exception;
        }
        if(entry.getC() == null){
            printC() throws Exception;
        }
    }
}
    //entryList.stream().filter(entry -> entry.getA() == null).forEach(entry -> printA()); something like this?
Run Code Online (Sandbox Code Playgroud)

如何将其转换为Lambda表达式?

java lambda java-8

40
推荐指数
4
解决办法
9万
查看次数

缺少JDK,需要运行一些NetBeans模块

完整的错误消息:JDK缺少和需要运行一些NetBeans模块请使用--jdkhome命令行选项来指定JDK安装或看到http://wiki.netbeans.org/FaqRunningOnJre以获取更多信息.

一些细节:我刚刚第一次在Linux mint上安装了Netbeans,当我启动它时打开模块时会出现此错误消息.但我确实安装了jdk.

$ java -version

java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
Run Code Online (Sandbox Code Playgroud)

$ javac -version

javac 1.8.0_66
Run Code Online (Sandbox Code Playgroud)

java openjdk netbeans jdk1.6 java-8

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

Stream Way获取匹配boolean的第一个元素的索引

我有一个List<Users>.我想用特定的用户名获取流中(第一个)用户的索引.我不想竟要求User.equals()一些描述User,只是为了有相同的用户名.

我可以想到这样做的丑陋方法(迭代和计数),但感觉应该有一个很好的方法来做到这一点,可能是通过使用Streams.到目前为止,我所拥有的最好的是:

int index = users.stream()
    .map(user -> user.getName())
    .collect(Collectors.toList())
    .indexOf(username);
Run Code Online (Sandbox Code Playgroud)

这不是我写过的最糟糕的代码,但它并不好.它也不是那么灵活,因为它依赖于一个带有.equals()描述你正在寻找的属性的函数的类型的映射函数; 我宁愿有一些可以随心所欲的东西Function<T, Boolean>

谁知道怎么样?

java java-8 java-stream

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