我有一个大约十行代码的方法.我想创建更多完全相同的方法,除了一个会改变一行代码的小计算.这是传递函数指针以替换该行的完美应用程序,但Java没有函数指针.什么是我最好的选择?
在Java中,如何仅列出目录中的子目录?
我想使用java.io.File功能,Java中最好的方法是什么?
我很难理解为什么以下代码编译:
public class MethodRefs {
public static void main(String[] args) {
Function<MethodRefs, String> f;
f = MethodRefs::getValueStatic;
f = MethodRefs::getValue;
}
public static String getValueStatic(MethodRefs smt) {
return smt.getValue();
}
public String getValue() {
return "4";
}
}
Run Code Online (Sandbox Code Playgroud)
我可以看到为什么第一个赋值是有效的 - getValueStatic显然匹配指定的Function类型(它接受一个MethodRefs对象并返回一个String),但第二个让我感到困惑 - 该getValue方法不接受任何参数,那么为什么它仍然有效分配给它f?
以下代码中::的含义是什么?
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
Run Code Online (Sandbox Code Playgroud) 我知道比较并compareTo返回一个int值.
例如:
Returns
0 if a equal b
-1 if a < b
+1 if a > b
Run Code Online (Sandbox Code Playgroud)
sort方法调用其中一个compareTo或compare()方法.但是sort方法如何安排list比较或compareTo返回int值.什么是在a compare或compareTo返回int值之后运行的背景场景?如何sort使用返回的int值(-1或0or 1)compare和compareTo
我在java 8中看到了一个迭代集合的代码.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
numbers.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
功能是System.out::println什么?以上代码如何迭代List.
运营商的用途是::什么,我们可以在哪里使用这个运营商?
我有一个有几个方法的类,这些方法中没有构造函数.
所以,我想知道是否可以在没有创建类实例的情况下调用类的方法.
例如,我可以这样做:
NameOfClass.doMethod(x1,x2,...,xn)
Run Code Online (Sandbox Code Playgroud)
总的来说,我不明白为什么它不可能.我只是调用一个函数来做某事(或返回一些值).如果可能,如果方法为类的私有变量设置值,将会发生什么.我怎样才能达到这个值?以同样的方式?
NameOfClass.nameOfVariable
Run Code Online (Sandbox Code Playgroud) 我学习了Java 8的新功能.
我正在玩不同的例子,我发现了一个奇怪的行为:
public static void main(String[] args) {
method(Test::new);
}
static class Test{
}
private static void method(Supplier<Test> testSupplier){
Test test = testSupplier.get();
}
Run Code Online (Sandbox Code Playgroud)
这段代码编译成功,但我不知道它是如何工作的.
为什么可以Test::new接受供应商?
供应商界面看起来很简单:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
Run Code Online (Sandbox Code Playgroud) 在下面的代码示例中,做了::什么:
public static void main(String[] args) {
List<Integer> l = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
Integer s = l.stream().filter(Tests::isGT1)
.filter(Tests::isEven)
.map(Tests::doubleIt)
.findFirst()
.orElse(100);
System.out.println(s);
}
private static boolean isGT3(int number){
return number > 3;
}
private static boolean isEven(int number){
return number % 2 ==0;
}
private static int doubleIt(int number){
return number * 2;
}
Run Code Online (Sandbox Code Playgroud)