我正在学习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项目有疑问:
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) 我使用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)
如何确保不删除尾随零?
提前致谢!
客户端可以是能够发送或者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)
有关如何更清楚地实施它的任何建议?
计算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) 我有一个增加数字和字符组合的问题.我想要的是从 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)
有什么方法可以解决这个问题吗?
我们在项目中使用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语句.很高兴听到你的想法.
我有一个可选的.
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
我想知道这是否可以作为流函数更整洁地编写:
MyObject myObject = new MyObject();
for (Thing thing : listofThings) {
myObject = myObject.combine(thing);
}
Run Code Online (Sandbox Code Playgroud) 我有一个需要的案例
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 ×10
java-8 ×10
java-stream ×3
lambda ×2
instant ×1
java-time ×1
list ×1
methods ×1
optional ×1
reference ×1
spring-boot ×1
sum ×1
threetenbp ×1