标签: java-8

如何在lamda表达式中使用super :: methodName引用方法的超类版本

我正在学习Java 8中的Lambda表达式和方法引用,并且看到我们可以通过使用'super'来引用方法的超类版本,如下所示:

超级::名

但是,当我这样做时,它不起作用.以下是示例代码:

interface MyInterface {
int someFunc(int x);
}

    class A {
    static int Func(int y) {
        // return (int) (Math.random() * y);
        return y;
    }
}

class B extends A {
    static int Func(int y) {
        // return (int) (Math.random() * y);
        return y + 1;
    }
}

public class Test {
    public static void main(String[] args) {
        System.out.print("Enter a number: ");
        java.util.Scanner scanner = new java.util.Scanner(System.in);
        int result = funcOp(B::Func, scanner.nextInt()); // <-This works.
//int result …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 method-reference

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

Java运算符内的Java传递类变量

我对Java项目有疑问:

public class example {

   public Data getData() {
        List<Users> users = usersService.findByClinicId(id);
        Type targetListType = new TypeToken<List<UserDTO>>() {}.getType();
        List<UserDTO> usersDTO = modelMapper.map(users, targetListType);

        List<Personas> profesionales = personasService.findProfesionalsByClinicId(id);
        targetListType = new TypeToken<List<PersonaDTO>>() {}.getType();
        List<PersonaDTO> profesionalesDTO = modelMapper.map(profesionales, targetListType);

        List<Personas> auxiliares = personasService.findAuxiliarsByClinicId(id);
        targetListType = new TypeToken<List<PersonaDTO>>() {}.getType();
        List<PersonaDTO> auxiliaresDTO = modelMapper.map(auxiliares, targetListType);

        List<Prescripciones> prescripciones = prescripcionesService.findProfesionalsByClinicId(id);
        targetListType = new TypeToken<List<PrescriptionNameDTO>>() {}.getType();
        List<PrescriptionNameDTO> prescripcionesDTO = modelMapper.map(prescripciones, targetListType);

       profesionales = entityToDTO(PersonaDTO.class, profesionales);

    ...
   }

    private <T> List<T> entityToDTO(Class<T> clazz, List<T> list) { …
Run Code Online (Sandbox Code Playgroud)

java java-8

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

Java Instant to LocalDateTime尾随零

我使用Spring Boot在Java中将Instant转换为LocalDateTime,如下所示

LocalDateTime.ofInstant(timeInUtc, zoneId);
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我得到了一个Regex来检查我的资源是否返回带有LocalDateTime的Json.Regex期望以下格式的JSON值:

 2018-11-15T08:38:49.382
Run Code Online (Sandbox Code Playgroud)

但它似乎删除了尾随零,意味着代替

2018-11-15T08:38:49.380
Run Code Online (Sandbox Code Playgroud)

我得到的是符合正则表达式的

 2018-11-15T08:38:49.38
Run Code Online (Sandbox Code Playgroud)

如何确保不删除尾随零?

提前致谢!

java instant java-8 spring-boot

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

根据输入字符串解析LocalDateTime

客户端可以是能够发送或者String格式 "yyyy-MM-dd HH:mm:ss""yyyy-MM-dd"并根据它,我需要或者只是解析满LocalDateTime,如果他给我发了全格式或者创建LocalDateTime具有默认对象Time的一部分"23:59:59"

目前我已经编写了这个解决方案但是因为我使用异常来控制业务逻辑似乎很糟糕.

public class LocalDateTimeConverter implements IStringConverter<LocalDateTime> {

    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    @Override
    public LocalDateTime convert(String value) {
        LocalDateTime localDateTime;
        try {
            localDateTime = LocalDateTime.parse(value, DATE_TIME_FORMATTER);
        } catch (DateTimeParseException ex) {
            localDateTime = LocalDateTime.of(LocalDate.parse(value), LocalTime.of(23, 59, 59));
        }

        return localDateTime;
    }

}
Run Code Online (Sandbox Code Playgroud)

有关如何更清楚地实施它的任何建议?

java java-8 java-time

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

Java:DTO集合中的值的总和

计算MyDTO,Java 8中amountField的总和

private Double getSum(List<MyDTO> myDTOList) {
    return myDTOList.stream().map(MyDTO::getAmount).reduce(0d, Double::sum);
}
Run Code Online (Sandbox Code Playgroud)

java sum java-8 java-stream

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

用Java中的字符增加数字

我有一个增加数字和字符组合的问题.我想要的是从 001增加到ZZZ

例如:001,002,...,999,00A,...,00Z,0AA,......,ZZZ

我的代码看起来像这样:

int numberA = 1000;
int numberB = 1024;
int numberC = 1025;

/*
 * Some formulae here
 */

System.out.println(numberA);
//Result: 00A
System.out.println(numberB);
//Result: 00Z
System.out.println(numberC);
//Result: 0A0
Run Code Online (Sandbox Code Playgroud)

有什么方法可以解决这个问题吗?

java java-8

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

在使用ThreeTen-Backport与java.time时,您是否应该完全限定包前缀?

我们在项目中使用Three Ten Backport,因为我们的一个客户正在使用Java 7. Three Ten Backport为我们提供了Java 8中引入的新日期时间功能(java.time.*).

我想知道以下是否是一个好习惯.由于我们的大多数客户都使用Java 8,有一天我们可能会将所有客户升级到Java 8,使用org.threeten.bp完全限定类名是否真的有意义?最终,我们可能会将所有客户升级到Java 8并删除此依赖关系,如果我们最终执行此操作,那么如果我们只使用没有包前缀的类名,则代码更改将会更少.举一个代码示例,我的意思是这个.

import org.threeten.bp.LocalDate Time;

public class Example {

     public void example() {
          LocalDateTime datetime = // ....
     } 
}
Run Code Online (Sandbox Code Playgroud)

您可以在示例中看到我引用了没有包前缀的LocalDateTime.在Java 8中,是否会加载java.time.LocalDateTime类,或者org.threeten.bp.LocalDateTime?这有点不清楚,因为在这个代码中,在Java 8中,有两个LocalDateTime浮动,一个来自java.time,另一个来自org.threeten.bp.我假设本机Java库将被赋予优先权并加载,但我可能是错的.

这样做是好事吗?或者它可以生成编译器警告/错误?即使它没有产生任何警告或错误,它仍然是一个不好的做法?我很想这样做,因为通过包完全限定类只是简单的丑陋,如果我们最终删除了Three Ten依赖项,那么我们将不得不更改该代码的每个实例,而不是仅仅删除import语句.很高兴听到你的想法.

java java-8 threetenbp

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

如何在Optional.map()中使用方法引用

我有一个可选的.

Optional<AssetEvent> latestEvent = ...
Run Code Online (Sandbox Code Playgroud)

我想从事件内部添加一个字段到列表(如果存在).

latestEvent.map(event -> event.getTimestamp()).ifPresent(latestList::add);
Run Code Online (Sandbox Code Playgroud)

我的IDE(Intelij)向我展示了"Lambda可以替换为方法引用" event.getTimestamp()

重构为

latestEvent.map(this::getTimestamp).ifPresent(latestList::add);
Run Code Online (Sandbox Code Playgroud)

给我一个错误,因为this将在代码执行的内容中引用周围的Object.我如何在Optional中引用Object的方法latestEvent

java methods reference optional java-8

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

这可以转换成流一行吗?

我想知道这是否可以作为流函数更整洁地编写:

MyObject myObject = new MyObject();

for (Thing thing : listofThings) {
    myObject = myObject.combine(thing);
}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

正确的lambda过滤器实现

我有一个需要的案例

  • map一个对象,如果映射函数抛出异常,我将其映射到null.
  • filternull对象的映射流,如果为null则抛出异常,否则收集到List.

我怎么做到这一点?

list.stream().map(ob-> {
    try {
        // cannot throw only catch 
        return function(ob);
    } catch (Exception e) {
        log.error(e);
        return null;
    }            
}).filter(Objects::isNull).findFirst().orElseThrow(Exception::new);
Run Code Online (Sandbox Code Playgroud)

现在我的问题是我应该如何将上述lambda调整/重构为throw new Exception()on null或者collect(Collectors.toList()).

java lambda list java-8 java-stream

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