List<Animal> animals = this.service.findAll();
animals = animals.stream().sorted(Comparator.comparing(Animal::getName)).collect(Collectors.toList());
//working
Run Code Online (Sandbox Code Playgroud)
而
List<Animal> animals = this.service.findAll();
animals = animals.stream().sorted(Comparator.comparing(Animal.getName()).collect(Collectors.toList());
//Not working..
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我为什么我不能使用比较器比较没有方法参考?
使用新的Java 8 DateTime API(java.time),我们如何检查"最后"捕获时间是否早于配置的秒集?
例...
上次拍摄时间:13:00:00当前时间:13:00:31
if (last captured time is older then 30 seconds) then
do something
Run Code Online (Sandbox Code Playgroud) 我有100 000个对象的数组列表。我想删除某些具有特定ID的对象。我正在使用for循环来搜索ArrayList
和删除它们中的每一个。因此,这非常耗时。有没有任何可能的方法可以执行此操作而不会循环?
如何使用Java 8的java.time
API 确定日期是否在两个其他日期之间?
import java.util.HashMap;
import java.util.Map;
class Geek
{
public String name;
public int id;
Geek(String name, int id)
{
this.name = name;
this.id = id;
}
@Override
public boolean equals(Object obj)
{
// checking if both the object references are
// referring to the same object.
if(this == obj)
return true;
// it checks if the argument is of the
// type Geek by comparing the classes
// of the passed argument and this object.
// if(!(obj instanceof Geek)) return false; …
Run Code Online (Sandbox Code Playgroud) 实际问题: 如果它调用(1)那么我怎样才能调用它(2)?
我有以下方法签名
public void myMethod(String myStr, MyClass myClass) {...} // (1)
public void myMethod(Object... objects) {...} // (2)
Run Code Online (Sandbox Code Playgroud)
我在某个地方打电话
myMethod(new String("name"), new MyClass());
将调用哪个重载方法?如果它调用(1)那么我怎么能这样调用它(2)?
我问的原因或原则.
我发现Java8中"流"接口的大多数方法都没有声明为"默认",因此它们没有方法体.例如:
boolean anyMatch(谓词谓词);
boolean allMatch(谓词谓词);
流映射(Function mapper);
正如您在源文件Stream.java中看到的那样.
但是这些没有实体的方法似乎能够在java程序中执行.
你知道为什么吗?
谢谢.
java functional-programming lambda-calculus java-8 java-stream
给定 an ArrayList<ArrayList<Long>>
,我们如何根据内部列表的元素对外部列表中的元素(列表)进行排序?
[
[1],
[2, 5, 6],
[6, 5],
[1, 2],
[2],
[1, 2, 3],
[2, 3]
]
Run Code Online (Sandbox Code Playgroud)
[1],
[1, 2],
[1, 2, 3],
[2],
[2, 3],
[2, 5, 6],
[6, 5]
Run Code Online (Sandbox Code Playgroud) 我不知道是谁负责这种工作,但对我来说,Javas Optional似乎还没有为制作做好准备.似乎Java Creators只是分层来完成工作,结果是一个没有准备好的可选类,缺少很多功能.
例如,考虑ifPresent方法.返回类型是void,但它可能是一个实例,只是在流框架中有类似peek的东西.把这个返回到一个方法中并不是什么大不了的事情,但不这样做意味着关于可选的思考不是生产就绪的.
另一个例子是缺少经过检查的方法,认为映射或过滤可能会引发异常,导致很多try catch样板.相反,他们只是添加了一个UncheckedIOException.样板仍然存在.我的意思是添加检查方法也是如此困难?
A可以给你更多的例子,但我不想把我的精力和时间投入到非完整的类中,比如可选的.我开始创建一个可选的替代品,我将来可能会将其作为一个开源项目发布.我实现的唯一缺点是可以将我的可选类与流框架结合起来,其中findAny或findFirst等方法返回我想要替换的Optional类型.我需要面对的这个问题,因为当然可选的需要是最终的.
我不知道什么是最好处理这种情况所以我希望这里有人可以给我一个很好的提示.
提前致谢.
编辑:我的确觉得这里有些人懒得看我的帖子,所以我想把事情搞清楚.
如果我说ifPresent应该返回这个当然我不能意味着Optional持有的值.它意味着"this"实例,以便您可以使用下一个命令进行链接,就像在流框架中查看一样.
public void ifPresent(Consumer<? super T> consumer) {
if (value != null)
consumer.accept(value);
}
Run Code Online (Sandbox Code Playgroud)
这是当前在Java8中使用的Optional的原始代码.如果您对该功能有所了解,可以这样写:
public OptionalReplacement<T> ifPresent(Consumer<? super T> consumer) {
requireNonNull(consumer);
if (isPresent()) {
consumer.accept(value);
}
return this;
}
Run Code Online (Sandbox Code Playgroud)
然后你就可以写出像
OptionalReplacement.of(nullable)
.ifPresent(notNull-> System.out.println(notNull))
.ifPresent(notNull-> System.out.println(notNull))
Run Code Online (Sandbox Code Playgroud)
没有理由将ifPresent视为无效并返回,这使您可以更灵活地进行链接.你能用当前的可选类进行那种链接,不!
下一个主题是已检查的例外.因为有些人没有幻想,我会给你一个处理检查异常的可能地图的例子.
@FunctionalInterface
public interface CheckedFunction<T, R, E extends Exception> {
R apply(T t) throws E;
}
public <U, E extends Exception> OptionalReplacement<U> checkedMap(Class<E> exceptionClass, CheckedFunction<? super T, ? extends U, E> mapper) …
Run Code Online (Sandbox Code Playgroud) java-8 ×9
java ×8
java-time ×2
api ×1
arraylist ×1
comparator ×1
date ×1
java-stream ×1
loops ×1
optional ×1
performance ×1
stream ×1