我有以下代码,它使用for loop来遍历中的元素JSONArray。
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 8like中的新功能streams API或forEach执行相同任务。提前致谢
Java 8
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); }