Hello, I have some suggestions for improvement utility classes.
1.) We have big class org.apache.ignite.internal.util.lang.GridFunc that has a lot of methods in 8000 lines. I propose to split it to several classes where utility methods are group by purpose. For example methods to work with IgnitePredicate should be in IgnitePredicates class, methods to work with Iterator should be in IgniteIterators class, etc... Same grouping is used in Guava. 2.) Methods like GridFunc.not(IgnitePredicate p) must not return anonymous class, it should return class with correct name. When I debug code and see to value of variable I cannot understand that is "GridFunc$123", something like "GridFunc$PredicateNot" looks much better. 3.) Methods with ugly signature like GridFunc.iterator(Iterable c, IgniteClosure trans, boolean readOnly, @Nullable IgnitePredicate<? super T1>... p) should be split to simple methods like "GridFunc.transform(Iterable itr, IgniteClosure trans)", GridFunc.filter(Iterable itr, IgnitePredicate p), GridFunc.readonly(Iterable c) Thoughts?