io.datakernel.stream.processor.StreamFunction Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of async-streams Show documentation
Show all versions of async-streams Show documentation
Composable asynchronous/reactive streams with powerful data processing capabilities.
The newest version!
/*
* Copyright (C) 2015 SoftIndex LLC.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.datakernel.stream.processor;
import com.google.common.base.Function;
import com.google.common.base.Functions;
import io.datakernel.eventloop.Eventloop;
import io.datakernel.stream.AbstractStreamTransformer_1_1;
import io.datakernel.stream.AbstractStreamTransformer_1_1_Stateless;
import io.datakernel.stream.StreamDataReceiver;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Provides you apply function before sending data to the destination. It is a {@link AbstractStreamTransformer_1_1}
* which receives specified type and streams set of function's result to the destination .
*
* @param type of input data
* @param type of output data
*/
public final class StreamFunction extends AbstractStreamTransformer_1_1_Stateless implements StreamDataReceiver {
private final Function function;
/**
* Creates a new instance of this class
*
* @param eventloop eventloop in which filter will be running
* @param function function for applying
*/
public StreamFunction(Eventloop eventloop, Function function) {
super(eventloop);
checkNotNull(function);
this.function = function;
}
/**
* Returns callback for right sending data, if its function is identity, returns dataReceiver
* for sending data without filtering.
*/
@SuppressWarnings("unchecked")
@Override
public StreamDataReceiver getDataReceiver() {
return function == Functions.identity() ? (StreamDataReceiver) downstreamDataReceiver : this;
}
/**
* Applies function to received data and sends result to the destination
*
* @param item received data
*/
@Override
public void onData(I item) {
downstreamDataReceiver.onData(function.apply(item));
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy