我确信这很简单,但由于某种原因我没有得到我想要的。
我有一个SortedMap<String, String>
值,我想对其进行流式传输和过滤并仅保存一些值。
例如:
SortedMap<String, String> input = new TreeMap<>();
values.put("accepted.animal", "dog");
values.put("accepted.bird", "owl");
values.put("accepted.food", "broccoli");
values.put("rejected.animal", "cat");
values.put("rejected.bird", "eagle");
values.put("rejected.food", "meat");
我只想保留键中包含“accepted”的值并删除其他所有内容。
所以,结果将是:
{accepted.animal=dog, accepted.bird=owl, accepted.food=broccoli}
如何流式传输 map 并过滤掉除包含“accepted”的键之外的所有内容?
这是我尝试过的:
private SortedMap<String, String> process(final Input input) {
final SortedMap<String, String> results = new TreeMap<>();
return input.getInputParams()
.entrySet()
.stream()
.filter(params -> params.getKey().contains("accepted"))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
但由于“无法从静态上下文引用非静态方法”而失败。
最佳答案
您需要使用 Collectors.toMap
的另一个变体这样您就可以传递合并函数和供应商以将其收集为 TreeMap
:
return input.getInputParams()
.entrySet()
.stream()
.filter(params -> params.getKey().startsWith("accepted")) // small change
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(a, b) -> b, TreeMap::new));
关于java - 流式传输和过滤 SortedMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58331795/