(parameters) -> expression
(parameters) -> { statements; }
//示例1:不需要接受参数,直接返回10
()->10
//示例2:接受两个int类型的参数,并返回这两个参数相加的和
(int x,int y)->x+y;
//示例2:接受x,y两个参数,该参数的类型由JVM根据上下文推断出来,并返回两个参数的和
(x,y)->x+y;
//示例3:接受一个字符串,并将该字符串打印到控制到,不反回结果
(String name)->System.out.println(name);
//示例4:接受一个推断类型的参数name,并将该字符串打印到控制台
name->System.out.println(name);
//示例5:接受两个String类型参数,并分别输出,不反回
(String name,String sex)->{System.out.println(name);System.out.println(sex)}
//示例6:接受一个参数x,并返回该该参数的两倍
x->2*x
@FunctionalInterface
interface Converter<F, T>{
T convert(F from);
}
Converter<String ,Integer> converter=new Converter<String, Integer>() {
@Override
public Integer convert(String from) {
return Integer.valueOf(from);
}
};
Integer result = converter.convert("200");
System.out.println(result);
Converter<String ,Integer> converter=(param) -> Integer.valueOf(param);
Integer result = converter.convert("101");
System.out.println(result);
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hello lambda");
}
}).start();
new Thread(() -> System.out.println("hello lambda")).start();
ObjectRef::methodName
public class ReferenceTest {
public static void main(String[] args) {
Converter<String ,Integer> converter=new Converter<String, Integer>() {
@Override
public Integer convert(String from) {
return ReferenceTest.String2Int(from);
}
};
converter.convert("120");
}
@FunctionalInterface
interface Converter<F,T>{
T convert(F from);
}
static int String2Int(String from) {
return Integer.valueOf(from);
}
}
Converter<String, Integer> converter = ReferenceTest::String2Int;
converter.convert("120");
public class ReferenceTest {
public static void main(String[] args) {
Converter<String, Integer> converter = new Converter<String, Integer>() {
@Override
public Integer convert(String from) {
return new Helper().String2Int(from);
}
};
converter.convert("120");
}
@FunctionalInterface
interface Converter<F, T> {
T convert(F from);
}
static class Helper {
public int String2Int(String from) {
return Integer.valueOf(from);
}
}
}
Helper helper = new Helper();
Converter<String, Integer> converter = helper::String2Int;
converter.convert("120");
class Animal{
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void behavior(){
}
}
public class Bird extends Animal {
public Bird(String name, int age) {
super(name, age);
}
@Override
public void behavior() {
System.out.println("fly");
}
}
class Dog extends Animal {
public Dog(String name, int age) {
super(name, age);
}
@Override
public void behavior() {
System.out.println("run");
}
}
interface Factory<T extends Animal> {
T create(String name, int age);
}
Factory factory=new Factory() {
@Override
public Animal create(String name, int age) {
return new Dog(name,age);
}
};
factory.create("alias", 3);
factory=new Factory() {
@Override
public Animal create(String name, int age) {
return new Bird(name,age);
}
};
factory.create("smook", 2);
Factory<Animal> dogFactory =Dog::new;
Animal dog = dogFactory.create("alias", 4);
Factory<Bird> birdFactory = Bird::new;
Bird bird = birdFactory.create("smook", 3);
public class ReferenceTest {
public static void main(String[] args) {
int n = 3;
Calculate calculate = param -> {
//n=10; 编译错误
return n + param;
};
calculate.calculate(10);
}
@FunctionalInterface
interface Calculate {
int calculate(int value);
}
}
public class ReferenceTest {
public int count = 1;
public static int num = 2;
public void test() {
Calculate calculate = param -> {
num = 10;//修改静态变量
count = 3;//修改成员变量
return n + param;
};
calculate.calculate(10);
}
public static void main(String[] args) {
}
@FunctionalInterface
interface Calculate {
int calculate(int value);
}
}
@Test
public void predicateTest() {
Predicate<String> predicate = (s) -> s.length() > 0;
boolean test = predicate.test("test");
System.out.println("字符串长度大于0:" + test);
test = predicate.test("");
System.out.println("字符串长度大于0:" + test);
test = predicate.negate().test("");
System.out.println("字符串长度小于0:" + test);
Predicate<Object> pre = Objects::nonNull;
Object ob = null;
test = pre.test(ob);
System.out.println("对象不为空:" + test);
ob = new Object();
test = pre.test(ob);
System.out.println("对象不为空:" + test);
}
@Test
public void functionTest() {
Function<String, Integer> toInteger = Integer::valueOf;
//toInteger的执行结果作为第二个backToString的输入
Function<String, String> backToString = toInteger.andThen(String::valueOf);
String result = backToString.apply("1234");
System.out.println(result);
Function<Integer, Integer> add = (i) -> {
System.out.println("frist input:" + i);
return i * 2;
};
Function<Integer, Integer> zero = add.andThen((i) -> {
System.out.println("second input:" + i);
return i * 0;
});
Integer res = zero.apply(8);
System.out.println(res);
}
@Test
public void supplierTest() {
Supplier<String> supplier = () -> "special type value";
String s = supplier.get();
System.out.println(s);
}
@Test
public void consumerTest() {
Consumer<Integer> add5 = (p) -> {
System.out.println("old value:" + p);
p = p + 5;
System.out.println("new value:" + p);
};
add5.accept(10);
}
List<String> lists=new ArrayList<String >();
lists.add("a1");
lists.add("a2");
lists.add("b1");
lists.add("b2");
lists.add("b3");
lists.add("o1");
public static void streamFilterTest() {
lists.stream().filter((s -> s.startsWith("a"))).forEach(System.out::println);
//等价于以上操作
Predicate<String> predicate = (s) -> s.startsWith("a");
lists.stream().filter(predicate).forEach(System.out::println);
//连续过滤
Predicate<String> predicate1 = (s -> s.endsWith("1"));
lists.stream().filter(predicate).filter(predicate1).forEach(System.out::println);
}
public static void streamSortedTest() {
System.out.println("默认Comparator");
lists.stream().sorted().filter((s -> s.startsWith("a"))).forEach(System.out::println);
System.out.println("自定义Comparator");
lists.stream().sorted((p1, p2) -> p2.compareTo(p1)).filter((s -> s.startsWith("a"))).forEach(System.out::println);
}
public static void streamMapTest() {
lists.stream().map(String::toUpperCase).sorted((a, b) -> b.compareTo(a)).forEach(System.out::println);
System.out.println("自定义映射规则");
Function<String, String> function = (p) -> {
return p + ".txt";
};
lists.stream().map(String::toUpperCase).map(function).sorted((a, b) -> b.compareTo(a)).forEach(System.out::println);
}
public static void streamMatchTest() {
//流对象中只要有一个元素匹配就返回true
boolean anyStartWithA = lists.stream().anyMatch((s -> s.startsWith("a")));
System.out.println(anyStartWithA);
//流对象中每个元素都匹配就返回true
boolean allStartWithA
= lists.stream().allMatch((s -> s.startsWith("a")));
System.out.println(allStartWithA);
}
public static void streamCollectTest() {
List<String> list = lists.stream().filter((p) -> p.startsWith("a")).sorted().collect(Collectors.toList());
System.out.println(list);
}
public static void streamCountTest() {
long count = lists.stream().filter((s -> s.startsWith("a"))).count();
System.out.println(count);
}
public static void streamReduceTest() {
Optional<String> optional = lists.stream().sorted().reduce((s1, s2) -> {
System.out.println(s1 + "|" + s2);
return s1 + "|" + s2;
});
}
a1|a2 a1|a2|b1 a1|a2|b1|b2 a1|a2|b1|b2|b3 a1|a2|b1|b2|b3|o1
List<String> bigLists = new ArrayList<>();
for (int i = 0; i < 10000000; i++) {
UUID uuid = UUID.randomUUID();
bigLists.add(uuid.toString());
}
private static void notParallelStreamSortedTest(List<String> bigLists) {
long startTime = System.nanoTime();
long count = bigLists.stream().sorted().count();
long endTime = System.nanoTime();
long millis = TimeUnit.NANOSECONDS.toMillis(endTime - startTime);
System.out.println(System.out.printf("串行排序: %d ms", millis));
}
private static void parallelStreamSortedTest(List<String> bigLists) {
long startTime = System.nanoTime();
long count = bigLists.parallelStream().sorted().count();
long endTime = System.nanoTime();
long millis = TimeUnit.NANOSECONDS.toMillis(endTime - startTime);
System.out.println(System.out.printf("并行排序: %d ms", millis));
}
//递增序列
class NatureSeq implements Supplier<Long> {
long value = 0;
@Override
public Long get() {
value++;
return value;
}
}
public void streamCreateTest() {
Stream<Long> stream = Stream.generate(new NatureSeq());
System.out.println("元素个数:"+stream.map((param) -> {
return param;
}).limit(1000).count());
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有