Вот код, взятый из Документация Apache Edgent
Я не мог понять, что такое кортеж. Код приведен ниже:
public static void main(String[] args) throws Exception {
TempSensor sensor = new TempSensor();
DirectProvider dp = new DirectProvider();
Topology topology = dp.newTopology();
TStream<Double> tempReadings = topology.poll(sensor, 1, TimeUnit.MILLISECONDS);
TStream<Double> simpleFiltered = tempReadings.filter(tuple ->
!optimalTempRangeRef.get().contains(tuple));
simpleFiltered.sink(tuple -> System.out.println("Temperature is out of range! "
+ "It is " + tuple + "\u00b0F!"));
tempReadings.print();
dp.submit(topology);
}
Я получаю ошибку кортеж не может быть преобразован в переменную. В чем именно заключается ошибка, которую я получаю? Спасибо.
@ElliottFrisch, пожалуйста, попробуйте обосновать свой ответ на мой вопрос. Спасибо.
Пожалуйста, задавайте четкие вопросы. Если вы получаете сообщение об ошибке, всегда включайте полное сообщение об ошибке, включая stacktrace. Как видите, люди не понимают, qhat именно вы спрашиваете, и вы получаете ответы, которые не очень помогают. Избегайте этого, говоря более четко. Прочтите Как спросить, спасибо.
@ArunSubba Пожалуйста, попытайтесь оправдать свой очевидный отказ прочитать ссылку, любезно предоставленную в отношении цели, с которой вы задаете свой вопрос.




TStream<T>интерфейс предназначен для моделирования потока данных, обычно показаний датчиков. T в данном случае является типом, используемым для хранения отдельного показания, но «чтение» на самом деле может означать несколько чисел (например, температура, влажность и скорость ветра), объединенных в один составной тип, который в общем упоминается здесь как «кортеж». 'ценностей.
Однако, глядя на контекст вашего примера, мы имеем дело с потоком простых показаний температуры, поэтому здесь T соответствует одному числу типа Double. Поэтому выбор «кортежа» в качестве имени переменной немного сбивает с толку (математически это 1-кортеж, но в данном случае это означает просто «число»).
В вашем коде метод filter() принимает предикат, который здесь
tuple -> !optimalTempRangeRef.get().contains(tuple)
И optimalTempRangeRef.get() возвращает Range(Double), поэтому предикат говорит "Наше значение температуры выходит за пределы оптимального диапазона?"
Из документации для Range:
contains() is used to check for containment: e.g.
Ranges.closed(2,4).contains(2); // returns true
Ranges.open(2,4).contains(2); // returns false
Ranges.atLeast(2).contains(2); // returns true
Ranges.greaterThan(2).contains(2); // returns false
Ranges.atMost(2).contains(2); // returns true
Ranges.lessThan(2).contains(2); // returns false
Обновлено:
Похоже, у вашей IDE проблемы с лямбда-синтаксисом Java 8, поэтому вы можете переписать свой код, используя анонимные внутренние классы, например:
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<Double> tempReadings = topology.poll( sensor, 1, TimeUnit.MILLISECONDS );
TStream<Double> filteredStream = tempReadings.filter( new Predicate<Double>()
{
public boolean test( Double reading )
{
return !optimalTempRangeRef.get().contains( reading );
}
} );
filteredStream.sink( new Consumer<Double>()
{
public void accept( Double reading )
{
System.out.println( "Temperature is out of range! "
+ "It is " + reading + "\u00b0F!" )
}
} );
tempReadings.print();
dp.submit( topology );
}
А для какой версии Java вы компилируете? Синтаксис -> только начиная с Java 8
Спасибо за ваш ответ, но он по-прежнему говорит: Оператор> не определен для типа (ов) аргумента Double, boolean
На самом деле я использую eclipse IDE на Raspberry Pi3 с ОС Raspbian. У меня версия java "1.8.0_65".
Убедитесь, что ваш проект Eclipse настроен на использование синтаксиса Java 8.
У меня уровень соответствия компилятора 1,7, что является наивысшим
Спасибо, Ричард Инглис, за помощь, она мне очень помогла.
Ричард Инглис, не могли бы вы помочь мне с метод фильтрации
А вложенная упорядоченная пара.