Ich habe folgenden Code, indem Sie durch das Java-Stream-API eine Karte aus einer Liste in einer parallelen Weise aufzufüllen versucht:Woher weiß ich, ob Java Stream sammeln (Collectors.toMap) parallelisiert ist?
class NameId {...}
public class TestStream
{
static public void main(String[] args)
{
List<NameId > niList = new ArrayList<>();
niList.add(new NameId ("Alice", "123456"));
niList.add(new NameId ("Bob", "223456"));
niList.add(new NameId ("Carl", "323456"));
Stream<NameId> niStream = niList.parallelStream();
Map<String, String> niMap = niStream.collect(Collectors.toMap(NameId::getName, NameId::getId));
}
}
Wie kann ich wissen, wenn die Karte mehr Threads besiedelten verwendet, dh in parallel? Muss ich Collectors.toConcurrentMap anstelle von Collectors.toMap aufrufen? Ist dies ein vernünftiger Weg, um die Bevölkerung einer Karte zu parallelisieren? Woher weiß ich, dass die konkrete Karte die neue niMap unterstützt (z. B. HashMap)?
wobei n die Anzahl der Kern-Prozessor haben , n-1-Thread wird erstellt, um mit Ihrem parallelen Stream zu arbeiten. Sie haben 3 Zeilen in Ihrer Liste, so dass Sie die Leistung wahrscheinlich verringern werden. –
Das Stream-Framework versteckt die Implementierung (parallel oder nicht) von Ihnen absichtlich. Wenn alles richtig gemacht wird, gibt es keine Möglichkeit zu sagen. –