diff --git a/src/main/java/com/github/hcsp/functional/RefactorToConsumer.java b/src/main/java/com/github/hcsp/functional/RefactorToConsumer.java index 25075b4..f913109 100644 --- a/src/main/java/com/github/hcsp/functional/RefactorToConsumer.java +++ b/src/main/java/com/github/hcsp/functional/RefactorToConsumer.java @@ -23,47 +23,24 @@ public static void main(String[] args) { public static void printWithConsumer( Map map1, Map map2, - BiConsumer consumer) {} + BiConsumer consumer) { + map1.forEach(consumer); + map2.forEach(consumer); + } - public static void printWithComma(Map map1, Map map2) { - for (Map.Entry entry : map1.entrySet()) { - String key = entry.getKey(); - String value = entry.getValue(); - System.out.println(key + "," + value); - } + static BiConsumer, Map> printPrefix(String prefix) { + return ((map, map2) -> printWithConsumer(map, map2, (k, v) -> System.out.println(k + prefix + v))); + } - for (Map.Entry entry : map2.entrySet()) { - String key = entry.getKey(); - String value = entry.getValue(); - System.out.println(key + "," + value); - } + public static void printWithComma(Map map1, Map map2) { + printPrefix(",").accept(map1, map2); } public static void printWithDash(Map map1, Map map2) { - for (Map.Entry entry : map1.entrySet()) { - String key = entry.getKey(); - String value = entry.getValue(); - System.out.println(key + "-" + value); - } - - for (Map.Entry entry : map2.entrySet()) { - String key = entry.getKey(); - String value = entry.getValue(); - System.out.println(key + "-" + value); - } + printPrefix("-").accept(map1, map2); } public static void printWithColon(Map map1, Map map2) { - for (Map.Entry entry : map1.entrySet()) { - String key = entry.getKey(); - String value = entry.getValue(); - System.out.println(key + ":" + value); - } - - for (Map.Entry entry : map2.entrySet()) { - String key = entry.getKey(); - String value = entry.getValue(); - System.out.println(key + ":" + value); - } + printPrefix(":").accept(map1, map2); } } diff --git a/src/main/java/com/github/hcsp/functional/RefactorToFunction.java b/src/main/java/com/github/hcsp/functional/RefactorToFunction.java index 94f830e..341a0d9 100644 --- a/src/main/java/com/github/hcsp/functional/RefactorToFunction.java +++ b/src/main/java/com/github/hcsp/functional/RefactorToFunction.java @@ -16,7 +16,11 @@ public static void main(String[] args) { // 请尝试将下列四个方法使用IntBinaryOperator进行重构,减少重复代码 public static int[] calculate(int[] a, int[] b, IntBinaryOperator operator) { - return null; + int[] result = new int[a.length]; + for (int i = 0; i < a.length; ++i) { + result[i] = operator.applyAsInt(a[i], b[i]); + } + return result; } // 将两个数组中的每个数字分别相加,然后返回相加后的数组。你可以假定传入的数组都是等长的 @@ -24,34 +28,18 @@ public static int[] calculate(int[] a, int[] b, IntBinaryOperator operator) { // 例如,a=[1, 2, 3], b=[4, 5, 6] // 返回 [5 (1+4), 7 (2+5), 9 (3+6)] public static int[] add(int[] a, int[] b) { - int[] result = new int[a.length]; - for (int i = 0; i < a.length; ++i) { - result[i] = a[i] + b[i]; - } - return result; + return calculate(a, b, Integer::sum); } public static int[] minus(int[] a, int[] b) { - int[] result = new int[a.length]; - for (int i = 0; i < a.length; ++i) { - result[i] = a[i] - b[i]; - } - return result; + return calculate(a, b, (x, y) -> x - y); } public static int[] multiply(int[] a, int[] b) { - int[] result = new int[a.length]; - for (int i = 0; i < a.length; ++i) { - result[i] = a[i] * b[i]; - } - return result; + return calculate(a, b, (x, y) -> x * y); } public static int[] divide(int[] a, int[] b) { - int[] result = new int[a.length]; - for (int i = 0; i < a.length; ++i) { - result[i] = a[i] / b[i]; - } - return result; + return calculate(a, b, (x, y) -> x / y); } } diff --git a/src/main/java/com/github/hcsp/functional/RefactorToSupplier.java b/src/main/java/com/github/hcsp/functional/RefactorToSupplier.java index eccf69e..687f22a 100644 --- a/src/main/java/com/github/hcsp/functional/RefactorToSupplier.java +++ b/src/main/java/com/github/hcsp/functional/RefactorToSupplier.java @@ -1,8 +1,10 @@ package com.github.hcsp.functional; +import java.rmi.server.ObjID; import java.util.ArrayList; import java.util.List; import java.util.Random; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; public class RefactorToSupplier { @@ -19,30 +21,23 @@ public static void main(String[] args) { // 请尝试使用函数式接口Supplier对三个方法进行重构,消除冗余代码 // 并尽量尝试使用lambda表达式和方法引用来传递参数 public static List create(Supplier supplier) { - return null; - } - - public static List createObjects() { List result = new ArrayList<>(); for (int i = 0; i < 10; i++) { - result.add(new Object()); + result.add(supplier.get()); } return result; } + public static List createObjects() { + return create(Object::new); + } + public static List createStrings() { - List result = new ArrayList<>(); - for (int i = 0; i < 10; i++) { - result.add("" + i); - } - return result; + AtomicInteger i = new AtomicInteger(0); + return create(() -> "" + i.getAndIncrement()); } public static List createRandomIntegers() { - List result = new ArrayList<>(); - for (int i = 0; i < 10; i++) { - result.add(randomInt()); - } - return result; + return create(RefactorToSupplier::randomInt); } }