Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在流中查找比最大值少几倍的值_Java_Java 8_Java Stream - Fatal编程技术网

Java 在流中查找比最大值少几倍的值

Java 在流中查找比最大值少几倍的值,java,java-8,java-stream,Java,Java 8,Java Stream,我想找到比实际最长日期早一年的第一个日期。我试着用溪流来做,但我被卡住了 List<String> intervalIdList = new HashSet(); intervalIdList.add("2018-01"); intervalIdList.add("2017-12"); intervalIdList.add("2017-11"); intervalIdList.add("2017-10"); ... intervalIdList.add("2016-12"); //

我想找到比实际最长日期早一年的第一个日期。我试着用溪流来做,但我被卡住了

List<String> intervalIdList = new HashSet();

intervalIdList.add("2018-01");
intervalIdList.add("2017-12");
intervalIdList.add("2017-11");
intervalIdList.add("2017-10");
...
intervalIdList.add("2016-12"); // this is the value I want to find

LocalDate localDateSet =
                    intervalIdSet.stream()
                            .map(s-> LocalDate.parse(s))
                            .sorted()
                            .filter(localDate -> localDate < max(localDate)) // something like max(localDate)
                            .findFirst();
List intervalIdList=new HashSet();
有效期间列表添加(“2018-01”);
区间列表添加(“2017-12”);
区间列表添加(“2017-11”);
区间列表添加(“2017-10”);
...
区间列表。添加(“2016-12”);//这就是我想要找到的价值
LocalDate localDateSet=
intervalIdSet.stream()
.map->LocalDate.parse
.已排序()
.filter(localDate->localDate

我是否必须将最大过滤值写入流之外的变量

您似乎在寻找比今天早一年的最长日期:

List<String> intervalIdList = new ArrayList<>();

intervalIdList.add("2018-01-01");
intervalIdList.add("2017-12-01");
intervalIdList.add("2017-11-01");
intervalIdList.add("2017-10-01");
intervalIdList.add("2016-12-01"); // this is the value I want to find

LocalDate localDateSet = intervalIdList.stream()
        .map(LocalDate::parse)
        .filter(ld -> ld.isBefore(LocalDate.now().minus(Period.of(1, 0, 0))))
        .max(Comparator.comparingLong(LocalDate::toEpochDay))
        .get();

System.out.println(localDateSet);
并在读取最大值之前检查:

if(max.isPresent()) {
    LocalDate ld = max.get();
}

似乎您正在寻找比今天早1年的最长日期:

List<String> intervalIdList = new ArrayList<>();

intervalIdList.add("2018-01-01");
intervalIdList.add("2017-12-01");
intervalIdList.add("2017-11-01");
intervalIdList.add("2017-10-01");
intervalIdList.add("2016-12-01"); // this is the value I want to find

LocalDate localDateSet = intervalIdList.stream()
        .map(LocalDate::parse)
        .filter(ld -> ld.isBefore(LocalDate.now().minus(Period.of(1, 0, 0))))
        .max(Comparator.comparingLong(LocalDate::toEpochDay))
        .get();

System.out.println(localDateSet);
并在读取最大值之前检查:

if(max.isPresent()) {
    LocalDate ld = max.get();
}

首先,你必须找到实际的最晚日期

LocalDate latestDate = intervalIdList.stream().map(s -> s.split("-"))
        .map(sp -> LocalDate.of(Integer.parseInt(sp[0]), Integer.parseInt(sp[1]), 1))
        .max(Comparator.comparingLong(LocalDate::toEpochDay)).orElse(null);
然后我们需要找到所有比最新日期早一年的日期,然后得到它们的最新日期。所以这个代码可以做到这一点

LocalDate firstDateOneYearOlder = intervalIdList.stream().map(s -> s.split("-"))
        .map(sp -> LocalDate.of(Integer.parseInt(sp[0]), Integer.parseInt(sp[1]), 1))
        .filter(d -> ChronoUnit.DAYS.between(d, latestDate) > 365)
        .max(Comparator.comparingLong(LocalDate::toEpochDay)).orElse(null);

另外请注意,此解决方案使用相同格式的原始输入数据
列表
,无需任何修改。

首先,您必须找到实际的最新日期,如下所示

LocalDate latestDate = intervalIdList.stream().map(s -> s.split("-"))
        .map(sp -> LocalDate.of(Integer.parseInt(sp[0]), Integer.parseInt(sp[1]), 1))
        .max(Comparator.comparingLong(LocalDate::toEpochDay)).orElse(null);
然后我们需要找到所有比最新日期早一年的日期,然后得到它们的最新日期。所以这个代码可以做到这一点

LocalDate firstDateOneYearOlder = intervalIdList.stream().map(s -> s.split("-"))
        .map(sp -> LocalDate.of(Integer.parseInt(sp[0]), Integer.parseInt(sp[1]), 1))
        .filter(d -> ChronoUnit.DAYS.between(d, latestDate) > 365)
        .max(Comparator.comparingLong(LocalDate::toEpochDay)).orElse(null);

另外请注意,此解决方案使用相同格式的原始输入数据
列表
,没有任何修改。

您只是在流中查找最长日期吗?Actulal max没有意义^^
List intervalIdList=new HashSet()这对于开始…流两次非常有意义-找到max,从中筛选max@azro这正是我投票关闭此项的原因…您是否只是在寻找流中的最长日期?Actulal max没有意义^^
List intervalIdList=new HashSet()这对于开始…流两次非常有意义-找到max,从中筛选max@azro正是因为这个原因,我投票关闭了这个……是的,我是这样做的,但我认为有一个机会在其中一个stream@Adriano这是一条小溪。请看第一个代码段,它直接调用
.get()
。你可能想把它改成
.orElse
…是的,我是这样做的,但我认为有机会用一种方式来做stream@Adriano这是一条小溪。请看第一个代码段,它直接调用
.get()
。您可能需要将其更改为
.orElse
。。。