找到关于 Java 8 的4330 篇文章
6K+ 次查看
Callable 接口定义在 java.util.concurrent 包中。与只能运行线程的 Runnable 接口相反,Callable 对象返回由线程完成的计算结果。Callable 对象返回 Future 对象,该对象提供用于监视线程执行的任务进度的方法。Future 对象用于检查 Callable 接口的状态,并在线程完成之后从 Callable 中检索结果。在下面的示例中,我们可以将 Callable 接口编写为 Lambda 表达式。示例 import java.util.concurrent.*; public class LambdaCallableTest { public static void main(String args[]) throws InterruptedException { ExecutorService executor = Executors.newSingleThreadExecutor(); ... 阅读更多
5K+ 次查看
只有一个抽象方法的接口称为函数式接口,也称为单抽象方法接口 (SAM 接口)。一个抽象方法意味着允许一个默认方法或一个抽象方法,其实现默认可用。SAM 接口的实例是 java.lang.Runnable、java.awt.event.ActionListener、java.util.Comparator 和 java.util.concurrent.Callable。SAM 接口可以使用 lambda 表达式或方法引用来实现。语法 @FunctionalInterface public interface Changeable { public void change(T o); } 示例 @FunctionalInterface interface MyInterface { String reverse(String n); } public class LambdaReverseTest { public static void main( String[] args ) { MyInterface myInterface = (str) -> { // ... 阅读更多
550 次查看
方法引用是 lambda 表达式的简化形式,可以执行一个方法。它可以使用 "::" 符号来描述。对特定对象的实例方法的引用是指绑定到接收器的非静态方法。语法 对象引用::实例方法名 示例 - 1 import java.util.*; public class InstanceMethodReferenceTest1 { public static void main(String[] args) { String[] stringArray = { "India", "Australia", "England", "Newzealand", "SouthAfrica", "Bangladesh", "WestIndies", "Zimbabwe" }; Arrays.sort(stringArray, String::compareToIgnoreCase); System.out.println(Arrays.toString(stringArray)); } } 输出 [Australia, Bangladesh, England, India, Newzealand, SouthAfrica, WestIndies, Zimbabwe] 示例 - 2 @FunctionalInterface interface Operation { public int average(int ... 阅读更多
2K+ 次查看
方法引用类似于 lambda 表达式,用于引用方法而不调用它,而构造函数引用用于引用构造函数而不实例化命名类。方法引用需要与 lambda 表达式类似的目标类型。但是,它们不是提供方法的实现,而是引用现有类或对象的方法,而构造函数引用为类中的不同构造函数提供不同的名称。语法 - 方法引用:: 示例 import java.util.*; public class MethodReferenceTest { public static void main(String[] args) { List names = new ArrayList(); List selectedNames = new ArrayList(); ... 阅读更多
1K+ 次查看
lambda 表达式是一个匿名函数(无名函数),它作为参数传递给另一个函数。使用 lambda 表达式的正文时,需要遵循一些规则。lambda 表达式正文的规则 lambda 表达式的正文可以是单个表达式或多个语句。如果我们使用单个表达式作为 lambda 表达式的正文,则无需用花括号({})括起正文。如果我们使用一个或多个语句作为 lambda 表达式的正文,则用花括号({})括起它们可能是必须的。语法 (参数) 或 () -> {用分号分隔的语句体} 或 单个语句 示例 interface Message { ... 阅读更多
435 次查看
Stream API 是在 Java 中实现函数式编程的一种强大方法。它通常与 lambda 表达式结合使用,并提供了一种有效的方式来执行数据操作操作,例如排序、过滤、映射、归约等。在下面的示例中,我们可以使用 Stream API 对集合进行排序。它通过使用 Comparator 接口的 sorted() 方法提供排序逻辑。如果我们有两个 Comparator 接口实例,并且需要通过复合条件(按第一个比较器,然后按第二个比较器)进行排序,我们可以通过在第一个实例上调用 thenComparing() 方法并将第二个实例传入来使用这两个比较器。示例 import java.util.*; import java.util.stream.*; ... 阅读更多
2K+ 次查看
谓词 (Predicate) 是一个泛型函数式接口,它表示一个返回布尔值(true 或 false)的单参数函数。此接口位于 java.util.function 包中,包含一个 test(T t) 方法,用于评估给定参数的谓词。语法:public interface Predicate { boolean test(T t); } 示例:import java.util.*; import java.util.function.Predicate; public class LambdaPredicateTest { public static void main(String args[]) { Employee emp1 = new Employee("Raja", 26); Employee emp2 = new Employee("Jaidev", 24); Employee emp3 = new Employee("Adithya", 30); List empList = new ArrayList(); empList.add(emp1); empList.add(emp2); ... 阅读更多
浏览量:177
方法引用在 lambda 表达式中提供了一种引用方法而不执行它的方式。它需要一个目标类型上下文,该上下文包含一个兼容的函数式接口。语法::: 在下面的示例中,我们可以使用方法引用找出 ArrayList 的最大值。示例:import java.util.*; class MyClass { private int val; MyClass(int v) { val = v; } int getVal() { return val; } } public class MethodReferenceMaxValueTest { static int compareMaxValue(MyClass a, MyClass b) { return a.getVal() - b.getVal(); } public ... 阅读更多