- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在阅读一本 java 书籍,我得到了这段代码。我知道方法引用是如何制作的,但这让我很头疼。我不知道 if(f.func(vals[i], v))
中的 vals[i]
如何充当映射的 this
功能。
// Use an instance method reference with different objects.
// A functional interface that takes two reference arguments
// and returns a boolean result.
interface MyFunc<T> {
boolean func(T v1, T v2);
}
// A class that stores the temperature high for a day.
class HighTemp {
private int hTemp;
HighTemp(int ht) {
hTemp = ht;
}
// Return true if the invoking HighTemp object has the same
// temperature as ht2.
boolean sameTemp(HighTemp ht2) {
return hTemp == ht2.hTemp;
}
// Return true if the invoking HighTemp object has a temperature
// that is less than ht2.
boolean lessThanTemp(HighTemp ht2) {
return hTemp < ht2.hTemp;
}
}
class InstanceMethWithObjectRefDemo {
// A method that returns the number of occurences
// of an object for which some criteria, as specified by
// the MyFunc parameter, is true.
static <T> int counter(T[] vals, MyFunc<T> f, T v) {
int count = 0;
for(int i=0; i < vals.length; i++) {
if(f.func(vals[i], v)) count++;
}
return count;
}
public static void main(String args[]) {
int count;
// Create an array of HighTemp objects.
HighTemp[] weekDayHighs = { new HighTemp(89), new HighTemp(82),
new HighTemp(90), new HighTemp(89),
new HighTemp(89), new HighTemp(91),
new HighTemp(84), new HighTemp(83) };
// Use counter() with arrays of the class HighTemp.
// Notice that a reference to the instance method
// sameTemp() is passed as the second argument.
count = counter(weekDayHighs, HighTemp::sameTemp,new HighTemp(89));
System.out.println(count + " days had a high of 89");
// Now, create and use another array of HighTemp objects.
HighTemp[] weekDayHighs2 = { new HighTemp(32), new HighTemp(12),
new HighTemp(24), new HighTemp(19),
new HighTemp(18), new HighTemp(12),
new HighTemp(-1), new HighTemp(13) };
count = counter(weekDayHighs2, HighTemp::sameTemp,new HighTemp(12));
System.out.println(count + " days had a high of 12");
// Now, use lessThanTemp() to find days when temperature was less
// that a specified value.
count = counter(weekDayHighs, HighTemp::lessThanTemp,new HighTemp(89));
System.out.println(count + " days had a high less than 89");
count = counter(weekDayHighs2, HighTemp::lessThanTemp,new HighTemp(19));
System.out.println(count + " days had a high of less than 19");
}
}
最佳答案
在此上下文中,HighTemp::sameTemp
等同于 (t1, t2) -> t1.sameTemp(t2)
。
在documentation它被称为对特定类型的任意对象的实例方法的引用
The following is an example of a reference to an instance method of an arbitrary object of a particular type:
String[] stringArray = { "Barbara", "James", "Mary", "John", "Patricia", "Robert", "Michael", "Linda" }; Arrays.sort(stringArray, String::compareToIgnoreCase);
The equivalent lambda expression for the method reference String::compareToIgnoreCase would have the formal parameter list (String a, String b), where a and b are arbitrary names used to better describe this example. The method reference would invoke the method a.compareToIgnoreCase(b).
关于JAVA 8 对实例方法的引用。 vals[i] 如何自动映射到 "InstanceMethWithObjectRefDemo.counter"中的 this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40026009/
我创建了一个基本的控制台应用程序来进行这样的测试。 short val = 32767; val++; Console.WriteLine(val);
考虑下面的代码,我试图理解三种不同的数据绑定(bind)方法之间的区别。由于我是 Angular4 的新手,我需要弄清楚何时使用什么。例如要分配 ngModel,请使用 [(ngModel)]。要分配
我看到很多人使用各种不同的方法来检查变量是否为空,似乎真的没有达成共识。我听说 if($foo) 与 if(!empty($foo)) 或 if($foo != "")。 这是真的吗? 我知道这是一个
此代码有效: let mut b: Vec = Vec::with_capacity(a.len()); for val in a.iter() { b.push(val); } 此代码不起作
这可能是 bike-shedding ,但也许我遗漏了一些有趣的东西...... 如果一个类初始化一个成员val至 std::numeric_limits::infinity()后来想检查 val 是
我不知道如何以可搜索的方式表达我的问题,所以如果已经得到解答,请原谅我。我对 SQL 命令还不够熟悉,甚至无法为我指明正确的方向。我有一个连接另外两个表的 sqlite 表。示例: ╔═════╦══
这个似乎依赖于 Java 和 Kotlin 之间的交互,首先是一个 Java 类: public class MyJavaClass { private Runnable q; pub
这个问题已经有答案了: What does &= mean? [closed] (5 个回答) 已关闭 5 年前。 基本上试图找到汉明字符串 https://en.wikipedia.org/wiki
我只是创建一个函数,该函数将 JSON.stringify 输入,同时也会检测数字输入上的 NaN,但不想使用 typeof 由于以下原因。输入可以是数字、 bool 值或字符串。仅此而已。 我已经遇
我正在努力构建允许我从起始值过渡到目标最终值的公式,同时使用 Sin 或 Cos 波在指定时间内衰减? 我正在尝试使用 CSS 和 jsfiddle 模仿我在下面的示例中看到的弹跳效果。我制作这个示例
这个问题已经有答案了: Why are we not allowed to have assignment statements in the file scope in C? (2 个回答) Why
我有这个代码 January February 我用它来尝试获取值: $month = $("#month option:selected").val(); 但它返回文本“Janu
在我的 Kotlin 项目中,我想在编译时声明常量: 所以我用这个: @RunWith(AndroidJUnit4::class) class TradersActivityTest { pr
我是 Java 新手,我知道这是一个愚蠢的问题,但我无法理解 Java 初始化变量的方式。我尝试做一些测试,但我不知道这是如何工作的。 当我学习C或Java编程时,定义新变量的语法是这样的: type
我正在尝试在 kotlin 中编写一个函数,但我无法将值重新分配给函数参数,它说 val cannot be reassigned 。 class WebView{ var homepage
我将查询字符串传递到我的 Windows Phone 应用程序中的页面:page.xaml?key=val&key2=val . 我收到的是 NavigationContext.QueryString
我正在阅读 https://github.com/antirez/redis 中的 Redis 源代码. 我在src/ziplist.c中看到了这样的宏 #define INT24_MAX 0x7ff
我想知道下面两种情况有什么区别,推荐使用哪种? $val = 0; if (!$val) { //True } if (empty($val) { //It's also True } 最佳答
我理解在 Kotlin 中 const val 用于声明常量,而 val 用于只读属性。但是,我想知道在以下情况下,哪个更适合使用。 假设我有一个 fragment 需要一个用于 saveInstan
LinkedIn 问题 const val 可以做什么 @JvmField val 不能做什么? 关于 Val 和 const 之间的区别,有多种答案。canst Val 和 @JvmField Va
我是一名优秀的程序员,十分优秀!