找到 4330 篇文章 关于 Java 8
6K+ 浏览量
Callable 接口定义在 java.util.concurrent 包中。Callable 的对象返回由线程完成的计算结果,这与 Runnable 接口形成对比,Runnable 接口只能运行线程。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 表达式的简化形式,可以执行一个方法。它可以使用 "::" 符号来描述。对特定对象的实例方法的引用是指绑定到接收者的非静态方法。语法对象引用::实例方法名示例 - 1import 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(); ... 阅读更多
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 ... 阅读更多