class DefragmentationScheduleCommand
    implements ComputeCommand<DefragmentationStatusCommandArg, DefragmentationTaskResult> {
    /** {@inheritDoc} */
    @Override public String description() {
        return "Schedule PDS defragmentation";
    }

    /** {@inheritDoc} */
    @Override public Class<DefragmentationScheduleCommandArg> argClass() {
        return DefragmentationScheduleCommandArg.class;
    }

    /** {@inheritDoc} */
    @Override public Class<DefragmentationTask> taskClass() {
        return DefragmentationTask.class;
    }

    /** {@inheritDoc} */
    @Override public void printResult(
        DefragmentationStatusCommandArg arg,
        DefragmentationTaskResult res,
        Consumer<String> printer
    ) {
        printer.accept(res.getMessage());
    }

    /** {@inheritDoc} */
    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, DefragmentationStatusCommandArg arg0) {<FILL_FUNCTION_BODY>}
}

        DefragmentationScheduleCommandArg arg = (DefragmentationScheduleCommandArg)arg0;

        if (F.isEmpty(arg.nodes()))
            return null;

        Set<String> nodesArg = new HashSet<>(Arrays.asList(arg.nodes()));

        return nodes.stream()
            .filter(n -> nodesArg.contains(Objects.toString(n.consistentId())))
            .collect(Collectors.toList());
    
<no_super_class>