检查字符串是否以一组键开头,并返回最匹配的键



有人能修复查找正确匹配密钥的逻辑吗。

public class Test {
public String eventName(String fileName, List<String> validEvents) {
System.out.println(validEvents);
return validEvents.stream().filter(fileName::startsWith).findFirst().orElse(null);
}
public static void main(String[] args) {
String eventNames ="scs_pre_stg_org,scs_pre_stg_orgmapping";
String event = new Test().eventName("scs_pre_stg_orgmapping123", Arrays.asList(eventNames.split(",")));
System.out.println(event); // scs_pre_stg_org :(
}
}

这应该是scs_pre_stg_orgmapping。

过滤后,按长度排序并获取最长的。

public String eventName(String fileName, List<String> validEvents) {
System.out.println(validEvents);
return validEvents
.stream()
.filter(fileName::startsWith)
.max(Comparator.comparingInt(String::length)) // get longest
.orElse(null);
}

您可以通过查找符合startsWith条件的max长度字符串来获得最佳匹配密钥。

public String eventName(String fileName, List<String> validEvents) {
return validEvents
.stream()
.filter(fileName::startsWith)
.peek(System.out::println)
.max(Comparator.comparingInt(String::length))
.orElse(null);
}

您可以简单地按相反的顺序对过滤后的字符串进行排序,将最长的字符串放在第一位。

public String eventName(String fileName, List<String> validEvents) {
System.out.println(validEvents);
return validEvents.stream()
.filter(fileName::startsWith)
.sorted(Comparator.reverseOrder())
.findFirst()
.orElse(null);
}

最新更新