jdk8-day01 Lambda表达式的练习1

自定义一个函数式接口,提供方法将字符串转为数字,抽象方法toNum。

package com.briup.day24;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
/**
 * Lambda表达式练习
 * @author chouhan
 * @data 2021-8-31 18:29:00
 */
public class LambdaTest4{
	public static void main(String[] args) {
		LambdaTest4 test=new LambdaTest4();
		test.method();
/*
 * 2.自定义一个函数式接口,提供方法将字符串转为数字,抽象方法toNum。
 */
		//1.重写接口的抽象类
//		Num num=new Num() {
//			@Override
//			public int toNum(String str) {
//				return Integer.valueOf(str);
//			}
//		};
		//2.直接调用接口中的方法,对字符串进行操作
		/*
		 * java.lang.NumberFormatException,类型转换异常
		 * (只能把数字字符串转换成数字)
		 * System.out.println(num.toNum("briup"));
		 */
		//2.1先把字符串拆开成字符,然后再转换成数字
		Num num2=(str)->Integer.valueOf(str.charAt(0));//转换第一个字符
		System.out.println(num2.toNum("b"));
		//2.2转换多个字符
		String s="briup";
		for (int i = 0; i < s.length(); i++) {
			char c=s.charAt(i);
			Num2 num3=(str)->Integer.valueOf(c);
			System.out.print(num3.toNum(c)+"\t");
		}
		System.out.println();
		test.method3();
		test.method4();
	}
}

使用Lambda表达式,实现一个大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合当中,然后进行遍历输出。

public void method() {
	List<Integer> list = new ArrayList<Integer>();
	List<Integer> list2 = new ArrayList<Integer>();
	while (list.size() < 20) {
		int random = (int) (Math.random() * 100 + 1);
		list.add(random);
	}
	list.forEach((i)->{
		if(i%2==0) {
			list2.add(i);
		}
	});
	list2.forEach((i)->{
		System.out.print(i+"\t");
	});
	System.out.println();
}

声明函数式接口,接口中声明抽象方法,public String getValue(String str);声明类TestLambda,类中编写方法使用接口作为参数,将每一个字符串转换成大写,并作为方法的返回值,再将一个字符串的第2个和第4个索引位置进行截取子串。

public void method3() {
	//1.toLowerCase():将此字符转小写。 
	//2.toUpperCase():将此字符转大写。 
	String upper = strHandler("briup123java后端chouhan",(str)->str.toUpperCase());
	System.out.println(upper);
		
	//substring(int beginIndex, int endIndex):返回子字符串
	String substr = strHandler("31程序员javabriup",(str)->str.substring(2, 5));
	System.out.println(substr);
		
	String newstr=strHandler("xgchouhan123", (str)->str.toUpperCase().substring(2, 5));
	System.out.println(newstr);
}
public String strHandler(String str,MyFuction mf){
	return mf.getValues(str);
}

使用Predicate接口,String[] arr={“卢本伟,男”,“五五开,女”,“white,男”};把三个字的,性别为男的存到一个集合中。

public static List<String> test(String[] arr,
			Predicate<String> pr1,Predicate<String> pr2){
		List<String> list=new ArrayList<String>();
		for (String string : arr) {
			if(pr1.and(pr2).test(string)) {
				list.add(string);
			}
		}
		return list;
	};
	public void method4() {
		String[] arr={"卢本伟,男","五五开,女","white,男"};
		List<String> list = test(arr,(t)-> t.split("[,]")[0].length()==3,
				                     (t)-> t.split("[,]")[1].equals("男"));
		list.forEach(s->System.out.println(s));
	}
}

@FunctionalInterface//判断这是不是一个函数式接口
interface Num{
	public abstract int toNum(String str);
}
interface Num2{
	public abstract int toNum(char c);
}

interface MyFuction{
	public String getValues(String str);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值