我有以下代码,它使用for loop
来遍历中的元素JSONArray
。
import org.apache.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.stream.IntStream;
public class Pmt {
private String[] patchInformation_svnRevisionpublic;
private final Logger logger = Logger.getLogger(Pmt.class.getName());
private static final String COMMITS_IN_PATCH_IDENTIFIER = "patchInformation_svnRevisionpublic"; //key used to identify the commits in a patch from JSON response received from PMT
private static final String KEY_STRING = "name";
private static final String VALUE_STRING = "value";
public String[] getPublicGitCommitHashes(JSONArray jsonArray) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
String tempName = (String) jsonObject.get(KEY_STRING);
if (tempName.equals(COMMITS_IN_PATCH_IDENTIFIER)) {
JSONArray tempCommitsJSONArray = (JSONArray) jsonObject.get(VALUE_STRING);
//initializing the patchInformation_svnRevisionpublic array
patchInformation_svnRevisionpublic = new String[tempCommitsJSONArray.length()];
// for ommiting the white spaces at the begingin and end of the commits
IntStream.range(0, tempCommitsJSONArray.length()).forEach(j -> patchInformation_svnRevisionpublic[j] = ((String) tempCommitsJSONArray.get(j)).trim());
logger.info(" The commits hashes obtained from WSO2 PMT are successfully saved to an array");
System.out.println("The commit Ids are");
// for printing all the commits ID associated with a patch
IntStream.range(0, patchInformation_svnRevisionpublic.length).mapToObj(i1 -> patchInformation_svnRevisionpublic[i1]).forEach(System.out::println);
System.out.println();
break;
}
}
//to prevent from internaal representation by returning referecnce to mutable object
String clonedPatchInformation_svnRevisionpublic[] = patchInformation_svnRevisionpublic.clone();
return clonedPatchInformation_svnRevisionpublic;
}
}
我如何使用Java 8
like中的新功能streams API
或forEach
执行相同任务。提前致谢
这等效于Java 8流API中的代码。不是100%等效,但是您可以了解主要思想。
private static final String COMMITS_IN_PATCH_IDENTIFIER = "patchInformation_svnRevisionpublic"; //key used to identify the commits in a patch from JSON response received from PMT
private static final String KEY_STRING = "name";
private static final String VALUE_STRING = "value";
public List<String> getCommitIds (JSONArray array) {
return arrayToStream(array)
.map(JSONObject.class::cast)
.filter(o -> o.get(KEY_STRING).equals(COMMITS_IN_PATCH_IDENTIFIER))
.findFirst()
.map(o -> (JSONArray) o.get(VALUE_STRING))
.map(Main::arrayToStream)
.map(commits ->
commits.map(Object::toString)
.map(String::trim)
.collect(Collectors.toList())
)
.orElseGet(Collections::emptyList);
}
@Nonnull
private static Stream<Object> arrayToStream(JSONArray array) {
return StreamSupport.stream(array.spliterator(), false);
}
问题内容: 我有一个Map如下所示的bean: 这ftqSet适合以下数据结构: 在我的测试JSP文件中,我一直在尝试使用来访问数据 : 但是它没有输出${f.feedId}。为什么会这样呢?我将如何访问该结构的各个元素,以便创建一个漂亮的表? 问题答案: 的每次迭代中给出了一个实例,它反过来又和getValue()方法。这与在普通Java中进行操作类似。 例如 在的情况下, 的回报, ,所以你需
问题内容: 我在Linux上用bash编写脚本,需要遍历给定目录中的所有子目录名称。如何遍历这些目录(并跳过常规文件)? 例如: 给定目录是 它具有以下子目录: 我想检索A,B,C。 问题答案: 简短说明: 查找文件(很明显) 是当前目录,它位于is之后(恕我直言,它比直接包含在命令中更为灵活。如果要在此文件夹中执行更多操作,则只有一个位置可以更改,)。 并确保仅在当前目录中查找,并且不将自身包含
问题内容: 我有一个带有一些十六进制数字的文本文件,我正在尝试将其转换为十进制。我可以成功转换它,但似乎在循环存在之前它会读取一些不需要的字符,因此我遇到了以下错误。 我的代码如下 每个十六进制数字都在新行中输入 问题答案: 追溯表明文件末尾可能有一个空行。您可以这样解决: 另一方面,最好使用代替。不要忘记关闭文件,或者更好地使用该文件来关闭它们:
问题内容: 如何在JSP中循环通过? 问题答案: 就像使用普通Java代码一样。 但是,(JSP文件中的原始Java代码,那些东西)被认为是不明智的做法。我建议安装JSTL(只需将JAR文件放入其中,并在JSP顶部声明所需的taglib)。它有一可以迭代的标签Map。每次迭代都会给你带来反过来,而反过来又具有和方法。 这是一个基本示例: 因此,你的特定问题可以通过以下方式解决: 你需要将Servl
我在我的一个项目中使用Angular 5。在我的一个组件中,我有一个HTML表,其中有字段。 现在我需要这个输入字段的键盘快捷键,例如,如果用户按键,下一个输入字段应该被聚焦。同样地,如果用户按键,则应聚焦前一个字段。 这种类型的操作我以前在中使用和进行过。 现在我如何在Angular 5中做同样的事情呢? 另外,在某些情况下,我在这个嵌套表中有嵌套表和输入字段。我需要在输入字段上使用相同的行为(
例如: 如何在Java8 Stream中实现上述代码?