标签: java-8

Java流:按先前的映射结果进行分组和排序?

我必须遵循以下代码:

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class TimeZonesExample
{
    public static void main(String[] args)
    {
        Set<String> allZones = ZoneId.getAvailableZoneIds();
        LocalDateTime localDateTime = LocalDateTime.now();

        List<String> zoneList = new ArrayList<>(allZones);

        for (String s : zoneList)
        {
            ZoneId zoneId = ZoneId.of(s);
            ZonedDateTime zoneDateTime = localDateTime.atZone(zoneId);
            ZoneOffset zoneOffset = zoneDateTime.getOffset();
            String out = String.format("%35s %10s%n", zoneId, zoneOffset);

            System.out.printf(out);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这产生了这样一个列表:

                  Asia/Aden     +03:00
             America/Cuiaba     -03:00
                  Etc/GMT+9     -09:00
                  Etc/GMT+8     -08:00
             Africa/Nairobi     +03:00
            America/Marigot     -04:00 …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

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

使用Java 8解析周字符串以进行比较

我想比较几周的字符串表示,例如"01/17"周在"02/17"之前和"52/16"之后.

以下代码抛出一个异常,我猜是因为我的字符串没有暗示每周的确切日期.但是,我不在乎 - 它可能都是星期一或星期四或其他什么:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ww/YY", Locale.GERMANY);
LocalDate date1 = formatter.parse(str1, LocalDate::from);
Run Code Online (Sandbox Code Playgroud)

我需要修改解析器吗?或者解析其他格式?Unfortunatley几周没有像YearMonth这样的对象......

datetime parsing java-8 java-time

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

Java 8 List <V>到Map <K,V>覆盖重复键

嗨,我在执行代码时遇到错误:

java.lang.IllegalStateException: Duplicate key ad.ecs.core.scriptengine.SiteIDAndNPI@3a75ce6f
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1253)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at ad.ecs.core.scriptengine.Utils.getInterfaceIDsWithSiteIDAndNPI(Utils.java:689)
Run Code Online (Sandbox Code Playgroud)

我正在尝试将我的列表分组到地图中:

public static Map<Integer, SiteIDAndNPI> getInterfaceIDsWithSiteIDAndNPI(Session session) {
    @SuppressWarnings("unchecked")
    List<Srvsetup> srvsetups = session.createCriteria(Srvsetup.class)
            .add(Restrictions.gt("scriptinterfaceid", 0))
            .list(); 
    Map<Integer, SiteIDAndNPI> interfaceIDs = srvsetups.stream()
            .collect(Collectors.toMap(srv -> srv.getScriptinterfaceid(), 
                    srv -> getSiteIDAndNPI(srv.getId().getSiteid(), session)));

    @SuppressWarnings("unchecked")
    List<Facsetup> facsetups = session.createCriteria(Facsetup.class)
            .add(Restrictions.gt("scriptinterfaceid", 0))
            .list(); 
    interfaceIDs.putAll(facsetups.stream()
            .collect(Collectors.toMap(fac -> fac.getScriptinterfaceid(), 
                    fac -> getSiteIDAndNPI(fac.getPlid(), session))));
    return interfaceIDs;
}

public static SiteIDAndNPI getSiteIDAndNPI(int siteID, Session …
Run Code Online (Sandbox Code Playgroud)

java lambda dictionary java-8 java-stream

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

任何具有单一方法的接口都可以被视为功能接口吗?

例如,我有这个接口:

package tester;

public interface Calculator{

     public int calculate(int a,int b);

}
Run Code Online (Sandbox Code Playgroud)

要么

package tester;

@FunctionalInterface
public interface Calculator{

    public int calculate(int a,int b);

} 
Run Code Online (Sandbox Code Playgroud)

我也可以将第一个视为功能界面.例如 :

package tester;
public class A {

    int a;
    int b;
    int sum;
    A(Calculator c,int e, int d){
        a=e;
        b=d;
        sum =c.calculate(a, b);

    }
    int get(){
        return sum;
    }
}
Run Code Online (Sandbox Code Playgroud)

班长

package tester;

public class runner {

    public static void main(String a[]){

        System.out.println(new A((x,b)-> (x+b),1,2).get());
    }
}
Run Code Online (Sandbox Code Playgroud)

代码可以使用或不使用注释,那么为什么注释呢?为什么不能说任何具有单一方法的接口都可以作为功能接口?

java lambda java-8 functional-interface

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

如何将此lambda表达式转换为方法引用

如何将此lambda表达式转换为方法引用.这rs是一个ResultSetrowNumint.

(rs, rowNum) -> getXYZ(rs,rowNum);
Run Code Online (Sandbox Code Playgroud)

java java-8

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

将毫秒时间转换为毫秒时间

我从GPS接收器接收到时间戳,它以秒为单位的微秒时间表示:

00:12:34.567891
Run Code Online (Sandbox Code Playgroud)

Java 7及更低版本仅使用毫秒时间,因此我可以拆分字符串并将微秒部分解析为毫秒,但这似乎很荒谬。

Java 8以纳秒精度运行,但是如果我使用日期模式为“ HH:mm:ss.nnnnnn”的DateTimeFormatter,则“。”之后的部分会出现。以纳秒为单位考虑?

从本质上讲,我该如何获取我的微秒时间戳并将其转换为毫秒总数。

java api time java-8

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

Java 8:根据对象属性从列表中迭代和分组对象

我有一个列表(GlobalBooks),看起来类似于下面

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {

        GlobalBooks globalBooks = new GlobalBooks();

        List<Book> bookList  = new ArrayList<Book>();


        Book book = new Book();
        List<BookContent> bookContents = new ArrayList<BookContent>();

        book.setBookName("A");
        BookContent content = new BookContent();
        content.setDescription("December 2016");
        content.setComponentID(20l);
        bookContents.add(content);

        content = new BookContent();
        content.setDescription("January 2016");
        content.setComponentID(30l);
        bookContents.add(content);

        content = new BookContent();
        content.setDescription("Febuary 2016");
        content.setComponentID(40l);
        bookContents.add(content);
        book.setContents(bookContents);

        bookList.add(book);


        book = new Book();
        bookContents = new ArrayList<BookContent>();

        book.setBookName("B");
        content = new BookContent();
        content.setDescription("December 2016");
        content.setComponentID(20l);
        bookContents.add(content); …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

在由Java Stream.of()与IntStream与Arrays.stream()生成的Stream上调用map(Arrays :: toString)

为什么toString我在使用时无法解决该方法Arrays.stream()IntStream:

int row[] = ...
Arrays.stream(row)
      .map(Arrays::toString)
      .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

但是,另一方面,它可以在我使用时解决Stream.of():

int row[] = ...
Stream.of(row)
       .map(Arrays::toString)
       .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

避免使用Optionals分支null检查

假设我有下一段代码:

void doSmtng(A a){
    if (a!=null){
        B b = a.getB();
        if (b != null){
            C c = b.getC();
            if (c != null){
                d = c.getD();
            }
        }
    }
    doSmtngWithD(d);
}
Run Code Online (Sandbox Code Playgroud)

让我们说,我可以改变的,而不是获得API A,B,C,D我可以得到Optional<A>,Optional<B>等等.

编写更美观的代码以阻止所有这些空检查的正确方法是什么?另外,一旦变量(a,b,c,d ..)中的一个为空,有没有办法按照我的要求添加抛出异常?

java optional java-8

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

List Java 8中2个字符串的每个组合

我想组合列表中的每两个字符串并使用java8流返回组合列表:

List<String> list;
Stream.concat(list.stream(), list.stream())
                    .collect(toList());
Run Code Online (Sandbox Code Playgroud)

但是,此代码不会生成组合,只会生成列表的元素.我究竟做错了什么.我还希望这个代码可以并行化,以便它可以在多个内核上运行

java lambda functional-programming java-8 java-stream

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