如何在java 8中迭代JSONArray

时间:2017-03-17 10:03:36

标签: java json foreach java-8 java-stream

我有以下代码使用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

如何使用streams API中的新功能,例如forEachpublic static void setTekst(String tekst){ konsol.setText(tekst); } 来执行相同的任务。提前致谢

1 个答案:

答案 0 :(得分:9)

这相当于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);
}