BoolFunctions.java
package eu.javaexperience.functional;
import eu.javaexperience.annotation.FunctionDescription;
import eu.javaexperience.annotation.FunctionVariableDescription;
import eu.javaexperience.interfaces.simple.getBy.GetBy1;
public class BoolFunctions
{
protected static final GetBy1<Boolean, Object> NEVER = new GetBy1<Boolean, Object>()
{
@Override
public Boolean getBy(Object a)
{
return false;
}
};
@FunctionDescription
(
functionDescription = "Creates a function evaluates everything as false.",
parameters = {},
returning = @FunctionVariableDescription(description="", mayNull=false, paramName="",type=GetBy1.class)
)
public static <T> GetBy1<Boolean, T> never()
{
return (GetBy1<Boolean, T>) NEVER;
}
protected static final GetBy1<Boolean, Object> ALWAYS = new GetBy1<Boolean, Object>()
{
@Override
public Boolean getBy(Object a)
{
return true;
}
};
@FunctionDescription
(
functionDescription = "Creates a function evaluates everything as true.",
parameters = {},
returning = @FunctionVariableDescription(description="", mayNull=false, paramName="",type=GetBy1.class)
)
public static <T> GetBy1<Boolean, T> always()
{
return (GetBy1<Boolean, T>) ALWAYS;
}
@FunctionDescription
(
functionDescription = "Wraps the functions to one with AND logical relation.",
parameters =
{
@FunctionVariableDescription(description = "Boolean returning functions.", mayNull = false, paramName = "functions", type=GetBy1[].class),
},
returning = @FunctionVariableDescription(description="", mayNull=false, paramName="",type=GetBy1.class)
)
public static <T> GetBy1<Boolean, T> and(final GetBy1<Boolean, T>... funcs)
{
if(0 == funcs.length)
{
return never();
}
return new GetBy1<Boolean, T>()
{
@Override
public Boolean getBy(T a)
{
for(GetBy1<Boolean, T> f : funcs)
{
if(Boolean.TRUE != f.getBy(a))
{
return false;
}
}
return true;
}
};
}
@FunctionDescription
(
functionDescription = "Wraps the functions to one with OR logical relation.",
parameters =
{
@FunctionVariableDescription(description = "Boolean returning functions.", mayNull = false, paramName = "functions", type=GetBy1[].class),
},
returning = @FunctionVariableDescription(description="", mayNull=false, paramName="",type=GetBy1.class)
)
public static <T> GetBy1<Boolean, T> or(final GetBy1<Boolean, T>... funcs)
{
if(0 == funcs.length)
{
return never();
}
return new GetBy1<Boolean, T>()
{
@Override
public Boolean getBy(T a)
{
for(GetBy1<Boolean, T> f : funcs)
{
if(Boolean.TRUE == f.getBy(a))
{
return true;
}
}
return false;
}
};
}
@FunctionDescription
(
functionDescription = "Negates the given function.",
parameters =
{
@FunctionVariableDescription(description = "Boolean returning functions.", mayNull = false, paramName = "functions", type=GetBy1[].class),
},
returning = @FunctionVariableDescription(description="", mayNull=false, paramName="",type=GetBy1.class)
)
public static <T> GetBy1<Boolean, T> not(final GetBy1<Boolean, T> check)
{
return new GetBy1<Boolean, T>()
{
@Override
public Boolean getBy(T a)
{
if(Boolean.TRUE != check.getBy(a))
{
return true;
}
return false;
}
};
}
}