ධාරාවන්
ජාවා 8 ට පෙර
for (Direction dir : Direction.values()) {
System.out.println(dir);
}
ජාවා 8
අපට ලැම්බඩා සහ ඇළ දොළ භාවිතා කළ හැකිය ( නිබන්ධනය ):
Stream.of(Direction.values()).forEachOrdered(System.out::println);
ඇයි forEachOrdered
නොව forEach
ඇළ?
මෙම ප්රවාහයේ එක් එක් මූලද්රව්යයන් සඳහා ක්රියාවක් සිදු කරන විට, ප්රවාහයේ අර්ථකථන ගැටුම් අනුපිළිවෙලක් තිබේ නම්, ධාරාවේ ගැටුම් අනුපිළිවෙලෙහි හැසිරීම forEach
පැහැදිලිවම forEachOrdered
නිර්වචනය නොවේ. එබැවින් forEach
ඇණවුම තබා ඇති බවට සහතික නොවේ.
ධාරාවන් සමඟ වැඩ කිරීමේදී (විශේෂයෙන් සමාන්තර ඒවා) ධාරාවන්හි ස්වභාවය මතක තබා ගන්න. දක්වා ඇති පරිදි ලේඛය :
ධාරා මෙහෙයුම් සඳහා චර්යාත්මක පරාමිතීන් රාජ්ය නම්, ප්රවාහ නල මාර්ග ප්රති results ල නිර්විනාශක හෝ වැරදි විය හැකිය. ස්ථායී ලැම්බඩා යනු ප්රවාහ නල මාර්ගය ක්රියාත්මක කිරීමේදී වෙනස් විය හැකි ඕනෑම තත්වයක් මත රඳා පවතින ප්රති result ලයකි.
Set<Integer> seen = Collections.synchronizedSet(new HashSet<>());
stream.parallel().map(e -> { if (seen.add(e)) return 0; else return e; })...
මෙහිදී, සිතියම්ගත කිරීමේ ක්රියාවලිය සමාන්තරව සිදු කරන්නේ නම්, නූල් උපලේඛනගත වෙනස්කම් හේතුවෙන් එකම ආදානයේ ප්රති results ල ධාවනය සිට ධාවනය දක්වා වෙනස් විය හැකි අතර, අස්ථායි ලැම්බඩා ප්රකාශනයකින් ප්රති always ල සැමවිටම සමාන වේ.
ප්රවාහ ක්රියාකාරකම් සඳහා චර්යාත්මක පරාමිතීන්හි අතුරු ආබාධ සාමාන්යයෙන් අධෛර්යමත් වේ, මන්දයත් ඒවා බොහෝ විට නොදැනුවත්වම අස්ථායි අවශ්යතාව උල්ලං lations නය කිරීම්වලට මෙන්ම වෙනත් නූල්-ආරක්ෂක උපද්රවයන්ට ද හේතු විය හැකි බැවිනි.
ප්රවාහයන්ට අර්ථ දැක්වීමේ හමුවීමේ අනුපිළිවෙලක් තිබිය හැකිය හෝ නොතිබිය හැකිය. ප්රවාහයකට ගැටුම් අනුපිළිවෙලක් තිබේද නැද්ද යන්න රඳා පවතින්නේ ප්රභවය සහ අතරමැදි මෙහෙයුම් මත ය.