Skip to content

Commit 55ffb55

Browse files
committed
let generateSlots handle multi-slots
1 parent 2456b5e commit 55ffb55

File tree

1 file changed

+20
-22
lines changed

1 file changed

+20
-22
lines changed

src/main/java/me/hsgamer/bettergui/util/SlotUtil.java

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
import java.math.BigDecimal;
66
import java.util.*;
7-
import java.util.regex.Matcher;
8-
import java.util.regex.Pattern;
97
import java.util.stream.Collectors;
108
import java.util.stream.IntStream;
119
import java.util.stream.Stream;
@@ -17,7 +15,6 @@ public class SlotUtil {
1715
private static final String POS_X = "position-x";
1816
private static final String POS_Y = "position-y";
1917
private static final String POS_SLOT = "slot";
20-
private static final Pattern RANGE_PATTERN = Pattern.compile("([0-9]+)-([0-9]+)");
2118

2219
private SlotUtil() {
2320
// EMPTY
@@ -45,10 +42,7 @@ public static List<Integer> getSlots(Map<String, Object> map) {
4542
slots.add((y - 1) * 9 + x - 1);
4643
}
4744
if (map.containsKey(POS_SLOT)) {
48-
slots.addAll(Arrays
49-
.stream(String.valueOf(map.get(POS_SLOT)).split(","))
50-
.map(String::trim)
51-
.flatMap(SlotUtil::generateSlots).collect(Collectors.toList()));
45+
slots.addAll(generateSlots(String.valueOf(map.get(POS_SLOT))).collect(Collectors.toList()));
5246
}
5347
return slots;
5448
}
@@ -61,20 +55,24 @@ public static List<Integer> getSlots(Map<String, Object> map) {
6155
* @return the stream of slots
6256
*/
6357
public static Stream<Integer> generateSlots(String input) {
64-
Matcher matcher = RANGE_PATTERN.matcher(input);
65-
if (matcher.matches()) {
66-
int s1 = Integer.parseInt(matcher.group(1));
67-
int s2 = Integer.parseInt(matcher.group(2));
68-
if (s1 <= s2) {
69-
return IntStream.rangeClosed(s1, s2).boxed();
70-
} else {
71-
return IntStream.rangeClosed(s2, s1).boxed().sorted(Collections.reverseOrder());
72-
}
73-
}
74-
75-
return Validate.getNumber(input)
76-
.map(BigDecimal::intValue)
77-
.map(Stream::of)
78-
.orElseGet(Stream::empty);
58+
return Arrays.stream(input.split(","))
59+
.map(String::trim)
60+
.flatMap(rawSlot -> {
61+
String[] rangeSplit = rawSlot.split("-", 2);
62+
if (rangeSplit.length == 2) {
63+
Optional<Integer> start = Validate.getNumber(rangeSplit[0]).map(BigDecimal::intValue);
64+
Optional<Integer> end = Validate.getNumber(rangeSplit[1]).map(BigDecimal::intValue);
65+
if (start.isPresent() && end.isPresent()) {
66+
return IntStream.rangeClosed(start.get(), end.get()).boxed();
67+
} else {
68+
return Stream.empty();
69+
}
70+
} else {
71+
return Validate.getNumber(input)
72+
.map(BigDecimal::intValue)
73+
.map(Stream::of)
74+
.orElseGet(Stream::empty);
75+
}
76+
});
7977
}
8078
}

0 commit comments

Comments
 (0)