Просто пришлось решить подобную проблему. [3]
Мое решение состояло в том, чтобы написать помощника, который вернул предикат:
public static class Extensions
{
public static Expression<Func<Order, bool>> IsPaid()
{
return order => order.Payments.Sum(p => p.Amount) >= order.Total;
}
}
Вы можете переписать ваш оператор linq как:
var debts = storeDB.Orders
.Where(Extensions.IsPaid())
.OrderByDescending(o => o.DateCreated);
Это удобно, если вы хотите повторно использовать логику вычисления (DRY). Недостатком является то, что логика не в вашей модели домена.
if (myString != null && myString.length() > 0) {
// your magic here
}
Между прочим, если вы делаете много строк манипуляций, есть отличный класс Spring со всеми видами полезных методов:
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/StringUtils.html
Если myString
равно null
, то вызов myString.equals (null)
или myString.equals ("")
завершится ошибкой с исключением NullPointerException
. Вы не можете вызывать какие-либо методы экземпляра для нулевой переменной.
Сначала проверьте наличие null следующим образом:
if (myString != null && !myString.equals("")) {
//do something
}
Это использует оценку короткого замыкания , чтобы не пытаться выполнить .equals
, если myString
не возвращает значение null проверить.
Если ваша строка имеет значение null, такие вызовы должны вызывать исключение NullReferenceException:
myString.equals (null)
Но в любом случае, я думаю, что вам нужен такой метод:
public static class StringUtils
{
public static bool isNullOrEmpty(String myString)
{
return myString == null || "".equals(myString);
}
}
Затем в своем коде вы можете делать что-то вроде этого:
if (!StringUtils.isNullOrEmpty(myString))
{
doSomething();
}
Я всегда использую как это:
if (mystr != null && !mystr.isEmpty()){
//DO WHATEVER YOU WANT OR LEAVE IT EMPTY
}else {
//DO WHATEVER YOU WANT OR LEAVE IT EMPTY
}
или можно скопировать это в проект:
private boolean isEmptyOrNull(String mystr){
if (mystr != null && !mystr.isEmpty()){ return true; }
else { return false; }
}
и просто называют его как:
boolean b = isEmptyOrNull(yourString);
это возвратит true, если будет пустым или пустым.
b=true
, если пусто или пустой
или можно использовать выгоду попытки и поймать, когда это является пустым.
Это должно сработать:
if (myString != null && !myString.equals(""))
doSomething
}
Если нет, то myString, вероятно, имеет значение, которое вы не ожидаете. Попробуйте распечатать его следующим образом:
System.out.println("+" + myString + "+");
Использование символов «+» в окружении строки покажет вам, есть ли там лишние пробелы, которые вы не учитываете.
if (myString != null && !myString.isEmpty()) {
// doSomething
}
В качестве дальнейшего комментария , вам следует помнить об этом термине в контракте равно
:
From Object.equals (Object)
:
Для любого ненулевого ссылочного значения
x
,x.equals (null)
долженвернуть false
.
Для сравнения с null
используйте x == null
и x! = Null
.
Кроме того, x.field
и x.method ()
выбрасывают NullPointerException
if x == null
.
Я бы сделал что-то вроде этого:
( myString != null && myString.length() > 0 )
? doSomething() : System.out.println("Non valid String");
Вам необходимо убедиться, что объект myString
имеет значение null
:
if (myString != null) {
doSomething
}