gpt4 book ai didi

java - 如何使用Java8功能根据参数从集合中获取项目

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:54 25 4
gpt4 key购买 nike

我有一套包含以下元素的套装

Set<String> formatLookup = new HashSet<>();
formatLookup.add("DHMdhm");
formatLookup.add("THMthm");
formatLookup.add("JHMjhm");

我正在传递一个字符串,如下所示

String filterVal = "THM";

现在我想检查过滤器值存在于集合的哪个索引中(过滤器值顺序可能会有所不同,如 THM、HTM、MHT 等),我想从集合中返回该项目。下面是它的代码,它正在运行。

private static String getStoredFilter(String filterVal) {
String format = "DHMdhm";
boolean found = false;
Set<String> formatLookup = new HashSet<>();
formatLookup.add("DHMdhm");
formatLookup.add("THMthm");
formatLookup.add("JHMjhm");
Iterator<String> setIterator = formatLookup.iterator();
while (setIterator.hasNext()) {
String fmt = setIterator.next();
for (int j = 0; j < filterVal.length(); j++) {
if (!(fmt).contains(String.valueOf(filterVal.charAt(j)))) {
found = false;
break;
} else {
found = true;
}
}
if (found) {
return fmt;
}
}
return null;
}

我想使用 Java8 的特性。我是 Java8 的新手,我尝试使用流和 foreach。但是,由于 foreach 无法返回值,所以我不确定如何完成此操作。

你能帮我解决这个问题吗?

最佳答案

您可以通过简单地将键和输入都带入规范排列来处理排列,例如只需对它们进行排序:

static String canonical(String s) {
char[] c = s.toCharArray();
Arrays.sort(c);
return String.valueOf(c);
}

准备从规范键到指定字符串的映射

// do this only once
private static final Map<String,String> formatLookup
= Stream.of("DHMdhm", "THMthm", "JHMjhm")
.collect(Collectors.toMap(s -> canonical(s), Function.identity()));

和实际操作

private static String getStoredFilter(String filterVal) {
String key = canonical(filterVal);

// check whether there's an exact match
String quickChecked = formatLookup.get(key);
if(quickChecked!=null) return quickChecked;

// search for substring matches
return formatLookup.entrySet().stream()
.filter(e -> e.getKey().contains(key))
.map(Map.Entry::getValue)
.findAny().orElse(null);
}

如果字符串可能包含重复的字符而你想处理它,你只需要更改canonical 方法,例如

static String canonical(String s) {
return s.codePoints().collect(BitSet::new, BitSet::set, BitSet::or).stream()
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
}

关于java - 如何使用Java8功能根据参数从集合中获取项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47942253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com