L'interface TStream
est conçue pour modéliser un flux de données, généralement des lectures de capteurs. Le T
dans ce cas est le type utilisé pour stocker une lecture individuelle, mais 'lecture' peut vraiment signifier plusieurs nombres (par exemple température, humidité & vitesse du vent) joints ensemble dans un seul type composite, généralement appelé ici un 'tuple' de valeurs.
Cependant, en regardant le contexte de votre exemple, nous traitons un flux de simples lectures de température, donc ici T
correspond à un seul nombre de type Double
. Ainsi, le choix de 'tuple' comme nom de variable est un peu confus (mathématiquement, c'est un 1-tuple, mais dans ce cas cela signifie simplement 'un nombre').
Dans votre code, la méthode filter()
prend un prédicat, qui est ici
tuple -> !optimalTempRangeRef.get().contains(tuple)
Et optimalTempRangeRef.get()
renvoie un Range(Double)
, donc le prédicat signifie "notre valeur de température est-elle en dehors de notre plage optimale?"
À partir de la documentation pour Range
:
contains() est utilisé pour vérifier l'appartenance : par exemple
Ranges.closed(2,4).contains(2); // retourne true
Ranges.open(2,4).contains(2); // retourne false
Ranges.atLeast(2).contains(2); // retourne true
Ranges.greaterThan(2).contains(2); // retourne false
Ranges.atMost(2).contains(2); // retourne true
Ranges.lessThan(2).contains(2); // retourne false
ÉDIT :
On dirait que votre IDE a du mal avec la syntaxe lambda de Java 8, vous pouvez donc réécrire votre code en utilisant des classes internes anonymes, comme ceci:
import org.apache.edgent.function.Predicate;
import org.apache.edgent.function.Consumer;
public static void main( String[] args ) throws Exception
{
TempSensor sensor = new TempSensor();
DirectProvider dp = new DirectProvider();
Topology topology = dp.newTopology();
TStream tempReadings = topology.poll( sensor, 1, TimeUnit.MILLISECONDS );
TStream filteredStream = tempReadings.filter( new Predicate()
{
public boolean test( Double reading )
{
return !optimalTempRangeRef.get().contains( reading );
}
} );
filteredStream.sink( new Consumer()
{
public void accept( Double reading )
{
System.out.println( "La température est hors de la plage! "
+ "C'est " + reading + "\u00b0F!" )
}
} );
tempReadings.print();
dp.submit( topology );
}