Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 12 additions & 32 deletions src/main/java/com/github/hcsp/functional/RefactorToConsumer.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,50 +20,30 @@ public static void main(String[] args) {
// 请尝试使用BiConsumer函数式接口重构下列三个方法,消除重复代码,提高可读性
// 提示:你可以使用Map.forEach方法
// 加分项:如果你能编写一个返回BiConsumer的高阶函数(即"返回函数的函数"),那就更好了


public static void printWithConsumer(
Map<String, String> map1,
Map<String, String> map2,
BiConsumer<String, String> consumer) {}
BiConsumer<String, String> consumer) {
map1.forEach(consumer);
map2.forEach(consumer);
}

public static void printWithComma(Map<String, String> map1, Map<String, String> map2) {
for (Map.Entry<String, String> entry : map1.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + "," + value);
}

for (Map.Entry<String, String> entry : map2.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + "," + value);
}
printWithConsumer(map1,map2,(k,v)->System.out.println(k + "," + v));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

',' 后应有空格。
',' 后应有空格。
',' 后应有空格。
'->' 后应有空格。
'->' 前应有空格。

}


public static void printWithDash(Map<String, String> map1, Map<String, String> map2) {
for (Map.Entry<String, String> entry : map1.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + "-" + value);
}
printWithConsumer(map1,map2,(k,v)->System.out.println(k + "-" + v));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

',' 后应有空格。
',' 后应有空格。
',' 后应有空格。
'->' 后应有空格。
'->' 前应有空格。




for (Map.Entry<String, String> entry : map2.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + "-" + value);
}
}

public static void printWithColon(Map<String, String> map1, Map<String, String> map2) {
for (Map.Entry<String, String> entry : map1.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + ":" + value);
}
printWithConsumer(map1,map2,(k,v)->System.out.println(k + ":" + v));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

',' 后应有空格。
',' 后应有空格。
',' 后应有空格。
'->' 后应有空格。
'->' 前应有空格。


for (Map.Entry<String, String> entry : map2.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + ":" + value);
}
}
}
32 changes: 11 additions & 21 deletions src/main/java/com/github/hcsp/functional/RefactorToFunction.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,42 +16,32 @@ 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;
}

// 将两个数组中的每个数字分别相加,然后返回相加后的数组。你可以假定传入的数组都是等长的
// 下列minus/multiply/divide方法同理
// 例如,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, (o1, o2) -> (o1 - o2));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

表达式周围不必要的小括号。

}

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, (o1, o2) -> (o1 * o2));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

表达式周围不必要的小括号。


}

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, (o1, o2) -> (o1 / o2));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

表达式周围不必要的小括号。


}
}
23 changes: 8 additions & 15 deletions src/main/java/com/github/hcsp/functional/RefactorToSupplier.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,30 +19,23 @@ public static void main(String[] args) {
// 请尝试使用函数式接口Supplier对三个方法进行重构,消除冗余代码
// 并尽量尝试使用lambda表达式和方法引用来传递参数
public static List<Object> create(Supplier<Object> supplier) {
return null;
}

public static List<Object> createObjects() {
List<Object> result = new ArrayList<>();
for (int i = 0; i < 10; i++) {
result.add(new Object());
result.add(supplier.get());
}
return result;
}

public static List<Object> createObjects() {
return create(Object::new);
}

public static List<Object> createStrings() {
List<Object> result = new ArrayList<>();
for (int i = 0; i < 10; i++) {
result.add("" + i);
}
return result;
return create(String::new);
}

public static List<Object> createRandomIntegers() {
List<Object> result = new ArrayList<>();
for (int i = 0; i < 10; i++) {
result.add(randomInt());
}
return result;
return create(RefactorToSupplier::randomInt);
}

}