Skip to content
Advertisement

Can I use a lambda function like this?

I want to try to use lambda functions (which I do not understand well) so I can learn more about them. I have an assignment on trees that has us making a family tree class.

children is a set of all of the children nodes to this node.

/** = the number of nodes in this H1N1Tree.
 * Note: If this is a leaf, the size is 1 (just the root) */
public int size() {
    // TODO 2. This method must be recursive.
    if (children.size() == 0) return 1;
    AtomicInteger sizeOfChildren = new AtomicInteger();
    children.forEach(p -> {sizeOfChildren.addAndGet(p.size());});
    return sizeOfChildren.get();
}

Also as a side question, does this usage of AtomicInteger work similarly to making just an int sizeOfChildren, then running the lambda function with a C++ pointer to sizeOfChildren?

Advertisement

Answer

Yes you can, but it doesn’t look very nice. I think I would solve it with a stream instead.

public int size() {
    if (children.size() == 0) return 1;
    return children.stream().mapToInt(c -> c.size()).sum();
}
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement