fix lab 5 and 6

This commit is contained in:
Yadunand Prem 2022-10-13 21:26:17 +08:00
parent cdc460bdc7
commit bf43015456
3 changed files with 20 additions and 42 deletions

View File

@ -8,49 +8,24 @@ import java.util.Map;
import java.util.Scanner;
class Lab5 {
public static String getGrade(String module, String student, String assessment,
Map<String, Map<String, Map<String, String>>> db) {
Constant<Actually<Map<String, Map<String, Map<String, String>>>>> constantDb = new Constant<>() {
@Override
public Actually<Map<String, Map<String, Map<String, String>>>> init() {
return Actually.ok(db);
}
};
Constant<Actually<Map<String, Map<String, Map<String, String>>>>> constantDb = () -> Actually.ok(db);
Constant<String> constantNoEntry = new Constant<>() {
@Override
public String init() {
return "No such entry";
}
};
Constant<String> constantNoEntry = () -> "No such entry";
Immutator<Actually<Map<String, Map<String, String>>>, Map<String, Map<String, Map<String, String>>>> getModule = new Immutator<>() {
@Override
public Actually<Map<String, Map<String, String>>> invoke(Map<String, Map<String, Map<String, String>>> param) {
return Actually.ok(param.get(module));
}
};
Immutator<Actually<Map<String, String>>, Map<String, Map<String, String>>> getStudent = new Immutator<>() {
@Override
public Actually<Map<String, String>> invoke(Map<String, Map<String, String>> param) {
return Actually.ok(param.get(student));
}
};
Immutator<Actually<Map<String, Map<String, String>>>, Map<String, Map<String, Map<String, String>>>> getModule = param -> Actually
.ok(param.get(module));
Immutator<Actually<String>, Map<String, String>> getAssessment = new Immutator<>() {
@Override
public Actually<String> invoke(Map<String, String> param) {
return Actually.ok(param.get(assessment).toString());
}
Immutator<Actually<Map<String, String>>, Map<String, Map<String, String>>> getStudent = param -> Actually
.ok(param.get(student));
};
Immutator<Actually<String>, Map<String, String>> getAssessment = param -> Actually
.ok(param.get(assessment).toString());
return constantDb.init().next(getModule).next(getStudent).next(getAssessment).except(constantNoEntry);
return constantDb
.init()
.next(getModule)
.next(getStudent)
.next(getAssessment)
.except(constantNoEntry);
}
public static void main(String[] args) {

View File

@ -14,9 +14,12 @@ public abstract class Actually<T> implements Immutatorable<T>, Actionable<T> {
return failure;
}
@Override
public abstract <R> Actually<R> transform(Immutator<? extends R, ? super T> immutator);
public abstract T unwrap() throws Exception;
public abstract T except(Constant<? extends T> c);
public abstract <U extends T> T except(Constant<? extends U> c);
public abstract void finish(Action<? super T> action);
@ -37,7 +40,7 @@ public abstract class Actually<T> implements Immutatorable<T>, Actionable<T> {
}
@Override
public T except(Constant<? extends T> c) {
public <U extends T> T except(Constant<? extends U> c) {
return this.value;
}
@ -114,7 +117,7 @@ public abstract class Actually<T> implements Immutatorable<T>, Actionable<T> {
}
@Override
public Object except(Constant<? extends Object> c) {
public <U> U except(Constant<? extends U> c) {
return c.init();
}

View File

@ -16,7 +16,7 @@ public abstract class Actually<T> implements Immutatorable<T>, Actionable<T> {
public abstract T unwrap() throws Exception;
public abstract T except(Constant<? extends T> c);
public abstract <U extends T> T except(Constant<? extends U> c);
public abstract void finish(Action<? super T> action);
@ -37,7 +37,7 @@ public abstract class Actually<T> implements Immutatorable<T>, Actionable<T> {
}
@Override
public T except(Constant<? extends T> c) {
public <U extends T> T except(Constant<? extends U> c) {
return this.value;
}
@ -114,7 +114,7 @@ public abstract class Actually<T> implements Immutatorable<T>, Actionable<T> {
}
@Override
public Object except(Constant<? extends Object> c) {
public <U> U except(Constant<? extends U> c) {
return c.init();
}