将java 1.8转换为1.6

问题描述 投票:0回答:2

我怎样才能将它转换为java 1.6?方法.stream()在java 1.6中无法使用。

final Optional<Entry<String, String>> mapping = cfg.getTypeMapping()
                .entrySet()
                .stream()
                .filter(e -> e.getKey().startsWith(jsonType + "|"))
                .findFirst();
java json java-stream java-6
2个回答
6
投票

我们来看看:

mapping = cfg.getTypeMapping()
            .entrySet()
            .stream()
            .filter(e -> e.getKey().startsWith(jsonType + "|"))
            .findFirst();

上面的代码可能会获取某种类型的map,获取它的条目并迭代它们,以停止startsWith(jsonType + "|")的第一个键。

这就是全部,并且很容易在旧式循环代码中重写。

但是这里的实际挑战是:final Optional<Entry<String, String>>:使用Java 1.8将类Optional添加到Java中。

没有相应的东西。所以你的整个代码根本无法重写为Java 1.6

你可以做的最接近的事情是:编写循环代码,如果循环找到了什么,则返回该结果,否则返回null。或者,你可以这样做:

List<Entry<String, String>> firstMapping = Collections.emptyList(); 
for (Entry<String, String> entries = cfg.getTypeMapping().entrySet()) {
  if (entry.getKey().startsWith(jsonType + "|")) {
    firstMapping = Collections.singletonList(entry);
    break;
  }
} 
return firstMapping;

或者,鉴于OP考虑使用com.google.common.base.Optional,您可以这样做:

for (Entry<String, String> entries = cfg.getTypeMapping().entrySet()) {
  if (entry.getKey().startsWith(jsonType + "|")) {
    return Optional.of(entry);
  }
} 
return Optional.absent();

代替。

当然,永远记住:Java 6是。人们应该避免积极的开发,尤其是当人们不得不依赖其他人来进行实际的后端移植工作时。

(免责声明:我的代码示例意味着详细的伪代码灵感,我没有通过编译器运行它,它可能包含拼写错误等)


1
投票

流几乎总是可以转换为循环。您可以创建一个for循环,遍历条目集中的每个条目,检查它是否与filter中的条件匹配。如果是,立即打破循环

Entry<String, String> result = null;
for (Entry<String, String> entry : cfg.getTypeMapping().entrySet()) {
    if (entry.getKey().startsWith(jsonType + "|")) {
        result = entry;
        break;
    }
}

请注意,我使用null代替Optional来表示“未找到”值。

© www.soinside.com 2019 - 2024. All rights reserved.