summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/graph/AdjacencyMap.java
diff options
context:
space:
mode:
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/graph/AdjacencyMap.java')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/graph/AdjacencyMap.java74
1 files changed, 38 insertions, 36 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/graph/AdjacencyMap.java b/BJC-Utils2/src/main/java/bjc/utils/graph/AdjacencyMap.java
index 56b4653..7b240b8 100644
--- a/BJC-Utils2/src/main/java/bjc/utils/graph/AdjacencyMap.java
+++ b/BJC-Utils2/src/main/java/bjc/utils/graph/AdjacencyMap.java
@@ -7,12 +7,13 @@ import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.stream.IntStream;
-import bjc.utils.data.experimental.IHolder;
-import bjc.utils.data.experimental.Identity;
+import bjc.utils.data.IHolder;
+import bjc.utils.data.Identity;
import bjc.utils.funcdata.FunctionalList;
import bjc.utils.funcdata.FunctionalMap;
import bjc.utils.funcdata.IFunctionalList;
import bjc.utils.funcdata.IFunctionalMap;
+import bjc.utils.funcutils.FuncUtils;
/**
* An adjacency map representing a graph
@@ -67,54 +68,54 @@ public class AdjacencyMap<T> {
IFunctionalList<Integer> vertices = new FunctionalList<>();
- IntStream.range(0, numVertices)
- .forEach(element -> vertices.add(element));
+ FuncUtils.doTimes(numVertices,
+ (vertexNo) -> vertices.add(vertexNo));
adjacencyMap = new AdjacencyMap<>(vertices);
IHolder<Integer> row = new Identity<>(0);
inputSource.forEachRemaining((strang) -> {
- String[] parts = strang.split(" ");
+ readRow(adjacencyMap, numVertices, row, strang);
+ });
+ }
- if (parts.length != numVertices) {
- throw new InputMismatchException(
- "Must specify a weight for all " + numVertices
- + " vertices");
- }
+ return adjacencyMap;
+ }
- int column = 0;
+ private static void readRow(AdjacencyMap<Integer> adjacencyMap,
+ int numVertices, IHolder<Integer> row, String strang) {
+ String[] parts = strang.split(" ");
- for (String part : parts) {
- int columnWeight;
+ if (parts.length != numVertices) {
+ throw new InputMismatchException(
+ "Must specify a weight for all " + numVertices
+ + " vertices");
+ }
- try {
- columnWeight = Integer.parseInt(part);
- } catch (NumberFormatException nfex) {
- InputMismatchException imex =
- new InputMismatchException("" + part
- + " is not a valid weight.");
+ int column = 0;
- imex.initCause(nfex);
+ for (String part : parts) {
+ int columnWeight;
- throw imex;
- }
+ try {
+ columnWeight = Integer.parseInt(part);
+ } catch (NumberFormatException nfex) {
+ InputMismatchException imex = new InputMismatchException(
+ "" + part + " is not a valid weight.");
- adjacencyMap.setWeight(row.unwrap(number -> number),
- column, columnWeight);
+ imex.initCause(nfex);
- column++;
- }
+ throw imex;
+ }
- row.transform((number) -> {
- int newNumber = number + 1;
+ adjacencyMap.setWeight(row.getValue(), column,
+ columnWeight);
- return newNumber;
- });
- });
+ column++;
}
- return adjacencyMap;
+ row.transform((rowNumber) -> rowNumber + 1);
}
/**
@@ -137,8 +138,9 @@ public class AdjacencyMap<T> {
vertices.forEach(vertex -> {
IFunctionalMap<T, Integer> vertexRow = new FunctionalMap<>();
- vertices.forEach(
- targetVertex -> vertexRow.put(targetVertex, 0));
+ vertices.forEach(targetVertex -> {
+ vertexRow.put(targetVertex, 0);
+ });
adjacencyMap.put(vertex, vertexRow);
});
@@ -157,12 +159,12 @@ public class AdjacencyMap<T> {
int inverseValue = adjacencyMap.get(targetKey).get(key);
if (targetValue != inverseValue) {
- result.transform((bool) -> false);
+ result.replace(false);
}
});
});
- return result.unwrap(bool -> bool);
+ return result.getValue();
}
/**