Skip to content

Convert Python function to Java Function #17

Open
@ctrueden

Description

@ctrueden

It would be nice to support something like this:

>>> def fib(n):
...     if n == 0 or n == 1:
...         return 1;
...     return fib(n - 1) + fib(n - 2)
...
>>> import scyjava
>>> jfib = scyjava.convert.to_java(fib)
>>> print(type(jfib))
<class 'scyjava.convert._convert.FunctionFromPython'>
>>>

Where FunctionFromPython is:

from jnius import PythonJavaClass, java_method

class FunctionFromPython(PythonJavaClass):
    __javainterfaces__ = ['java/util/function/Function']

    def __init__(self, function):
        self.function = function

    @java_method('(Ljava/lang/Object;)Ljava/lang/Object;')
    def apply(self, t):
        return self.function(t)

Then anything operating on a Java Function can accept a Python function with appropriate conversion. For example:

jlist = ij.py.to_java([5, 4, 3, 2, 1])
fibList = jlist.stream().map(jfib).toArray()
print(f'{type(fibList)}')
print(fibList)

Prints:

<class 'list'>
[8, 5, 3, 2, 1]

😎

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions