java - For loops to Stream -
i'm learning streams , parallelstreams , trying apply this. i'm changing codes contains for loops streams can't change part of code. first, it's possible reduce code streams?
with foreach loops
private list<basicdbobject> linhacriativa(list<basicdbobject> linhas) { list<basicdbobject> lista = new arraylist<>(); (basicdbobject db : linhas) { if (!db.tomap().containskey("spec_linha-criativa")) { lista.add(db); continue; } string[] linhacriativa = db.get("spec_linha-criativa").tostring().split(";"); if (linhacriativa.length > 0) { (string criativa : linhacriativa) { basicdbobject dbobject = (basicdbobject) db.copy(); dbobject.replace("spec_linha-criativa", criativa); lista.add(dbobject); } } else { lista.add(db); } } return lista; } i can this, can't when db.tomap().containskey("spec_linha-criativa")
list<basicdbobject> notcontains = linhas.parallelstream().filter(m -> !m.tomap().containskey("spec_linha-criativa")).collect(collectors.tolist());
if understand code correctly, each basicdbobject in input list, extract 1 or several basicdbobjects, , add them output list.
this flatmap() operation:
return linhas.stream() .flatmap(this::extractoutputdbobjectsfrom) .collect(collectors.tolist()); now need create extractoutputdbobjectsfrom method:
private stream<basicdbobject> extractoutputdbobjectsfrom(dbobject db) { if (!db.tomap().containskey("spec_linha-criativa")) { return stream.of(db); } string[] linhacriativa = db.get("spec_linha-criativa").tostring().split(";"); if (linhacriativa.length > 0) { return arrays.stream(linhacriativa).map(criativa -> { basicdbobject dbobject = (basicdbobject) db.copy(); dbobject.replace("spec_linha-criativa", criativa); return dbobject; }); } else { return stream.of(db); } } (not tested, should idea)
Comments
Post a Comment