函数式接口的简单使用

居中打印杨辉三角形

        • 前提须知

前提须知

函数接口:仅包含一个抽象方法的接口。
Lambda表达式就是函数式接口的一个实现类。

Function表示一个参数返回一个结果,结果类型和参数类型不同,
定义了apply()方法,带一个参数,返回一个值。
Consumer< T >带一个参数不返回结果的操作,
定义accept(),接收参数。

参考Java语言程序设计(第3版)
实现代码

package com.bjsxt.stream;

import java.util.Arrays;
import java.util.function.Consumer;
import java.util.function.Function;

public class YanghuiTriangle {
	public static void main(String[] args) {
		int i, j;
		int level = 10;
		int triangle[][] = new int[level][];
		for (i = 0; i < triangle.length; i++)
			triangle[i] = new int[i + 1];
		triangle[0][0] = 1;
		triangle[1][1] = 1;
		for (i = 1; i < triangle.length; i++) {
			triangle[i][0] = 1;
			for (j = 1; j < triangle[i].length - 1; j++) {
				triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];// 杨辉三角的特点
				triangle[i][triangle[i].length - 1] = 1;
			}
		}

		// 居中打印
		Function<Integer, String> spacer = (count) -> {
			//将每行输出对应数量的空格作为一个函数赋给变量spacer
			StringBuilder sb = new StringBuilder();
			for (int k = 0; k < count; k++) {
				sb.append(" ");
			}
			return sb.toString();
		};
		int max = 50;
		Consumer<String> printCentered = (input) -> {
			//由accept接收的数组的长度,决定空格的个数
			int length = input.length();
			String spaces = spacer.apply((max - length) / 2);//应用spacer的函数
			System.out.println(spaces + input);//输出空格+内容
		};
		for (int k = 0; k < level; k++) {
			printCentered.accept(Arrays.toString(triangle[k]));
		}
	}
}

测试结果

杨辉三角:
                       [1]
                      [1, 1]
                    [1, 2, 1]
                   [1, 3, 3, 1]
                 [1, 4, 6, 4, 1]
               [1, 5, 10, 10, 5, 1]
             [1, 6, 15, 20, 15, 6, 1]
           [1, 7, 21, 35, 35, 21, 7, 1]
         [1, 8, 28, 56, 70, 56, 28, 8, 1]
      [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

你可能感兴趣的:(算法与数据结构)