我有一张看起来像这样的表:
|date_start | date_end |amount |
+------------+-------------+-------+
|2015-02-23 | 2015-03-01 |50 |
|2015-03-02 | 2015-03-08 |50 |
|2015-03-09 | 2015-03-15 |100 |
|2015-03-16 | 2015-03-22 |800 |
|2015-03-23 | 2015-03-29 |50 |
Run Code Online (Sandbox Code Playgroud)
并且我想计算出amount从上一个日期开始的column 增加/减少的百分比。例如,结果将是这样的,
|date_start | date_end |amount | perc_change |
+------------+-------------+-------+-------------+
|2015-02-23 | 2015-03-01 |50 |
|2015-03-02 | 2015-03-08 |50 | 0
|2015-03-09 | 2015-03-15 |100 | 50
|2015-03-16 | 2015-03-22 |800 | 700
|2015-03-23 | 2015-03-29 |50 | -750
Run Code Online (Sandbox Code Playgroud)
我已经搜索并绞尽脑汁几天了。通常,我只是使用服务器端代码来执行此操作,但现在我需要将其全部包含在查询中。
我正在编写一个Alexa技能,我希望将记录存储在未来时间的数据库中.例如,如果用户说"在两小时内",我想将时间存储在两小时后.
到目前为止,我发现我可以使用AMAZON.DURATION插槽类型将这样的单词转换为持续时间,但我还没想出如何将其添加到当前日期.
持续时间如下:PT2H.P表示持续时间,T表示时间单位,2H表示2小时.我自己可以解析这个问题,但是我希望有一些内置功能可以做到这一点?
我们有一个使用 GSON 作为转换器的 Retrofit API,它会调用要向用户显示的卡片列表。卡片遵循以下格式:
[
{
"cardType": "user",
"data": {}
},
{
"cardType": "content",
"data": {}
}
]
Run Code Online (Sandbox Code Playgroud)
卡之间的属性data有所不同,因此为了解决这个问题,我们使用 GSON 的RuntimeTypeAdapterFactory:
final RuntimeTypeAdapterFactory<Card> factory = RuntimeTypeAdapterFactory
.of(Card.class, "cardType")
.registerSubtype(UserCard.class, "user")
...
.registerSubtype(ContentCard.class, "content");
Run Code Online (Sandbox Code Playgroud)
但是,我们发现,如果 API 更新为包含我们不期望的新卡类型,则反序列化会默默失败。我所说的默默地,response.isSuccessful()仍然返回true,但response.body()为null。我们能够确定新卡类型的唯一方法是通过反复试验来解决问题。
有没有办法让 GSON 忽略我们尚未注册的任何卡类型?如果我们尝试添加这张新卡但应用程序不支持它,我想忽略它。
这是我的数据表:
| uid | date | visit | transactionDate |
+-----+----------+-------+-----------------+
| 1 | 6/2/2014 | 1 | 6/9/2014 |
| 1 | 6/2/2014 | 1 | 8/4/2014 |
| 2 | 6/2/2014 | 1 | 8/2/2014 |
| 2 | 6/2/2014 | 1 | 10/17/2014 |
| 2 | 6/2/2014 | 1 | 10/20/2014 |
| 3 | 6/2/2014 | 1 | 6/9/2014 |
| 3 | 6/2/2014 | 1 | 6/10/2014 |
| 3 | 6/2/2014 | 1 …Run Code Online (Sandbox Code Playgroud) 如果我用Java创建一个类,我总是被告知惯例是使一个类的所有字段都是私有的.如果我需要访问或更改它们,我可以创建一个accessor和mutator方法.我确实理解私有变量的重要性,因为它们有助于降低复杂性并允许封装.
我不明白的是,如果我创建一个公共访问者和mutator方法,那么那个变量是不是公共?为什么在任何人都可以访问私有变量的情况下仍然使用私有变量?
我还应该注意,我理解这些方法的重要性,但我想知道为什么我们懒得将变量设为私有,即使我们通过这些方法让任何人都可以访问它?
我有一个 API,可以让我使用以下内容通过 id 检索项目:
http://myapi.com/api/v1/item/1
Run Code Online (Sandbox Code Playgroud)
其中最后一个值是项目的 id。这很好,很花哨,我可以编写一个 Retrofit 服务接口并像这样调用该项目:
MyService service = MyService.retrofit.create(MyService.class);
service.itemById(1)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<Item>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.v(LOG_TAG, e.getMessage());
}
@Override
public void onNext(Item item) {
adapter.addItem(item);
}
});
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我想一次检索 5 个项目,但我不知道如何做到这一点。例如,如果我想获取 ID 为 1、2、3、4、5 的项目,我该如何在一组中执行此操作?我已经调查过了,Observable.zip()但我不太清楚如何设置它。
我刚刚构建了一个 AndroidStudio 项目,并被告知WearableListView.Adapter该类已被弃用。
但是,当我转到文档时,它没有说明被弃用。我一直无法弄清楚应该使用哪个类。
我试图通过查找结束日期小于或等于今天日期的所有项目来过滤我的列表.
我知道在Liquid中我可以过滤使用where:来查找符合条件的项目.例如,如果我想获得今天会议的清单,我可以做:
{% assign todays_conferences = (site.conferences | where: 'date_end', today) %}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试召开即将举行的会议时,我不能这样做:
{% assign upcoming_conferences = (site.conferences | where: 'date_end', ??? | sort: 'date_start') %}
Run Code Online (Sandbox Code Playgroud)
这是因为我不打算一对一匹配值,但我正在尝试根据日期比较查找项目.我搜遍了所有,无法找到方法.
如何以这种方式过滤列表?我希望我不必依次循环并在每一行上执行if语句.
所以我有一个看起来像这样的Kotlin类:
class MyClass {
var myString: String = ""
set(value) {
field = value
doSomethingINeed()
}
constructor(myString: String) {
this.myString = myString
}
}
Run Code Online (Sandbox Code Playgroud)
但是,Android Studio警告我可以将其用作默认构造函数.当我选择它时,它会将其更改为:
class MyClass(var myString: String)
Run Code Online (Sandbox Code Playgroud)
现在我失去了覆盖setter的机会,因为如果我创建一个名为setMyString()I 的方法,我将收到编译器错误.
如果字段是默认构造函数的一部分,有没有办法覆盖setter,或者我是否必须使用选项1并忽略我得到的警告?
我想提供这个问题的背景.我见过独特的解决方案,人们创建将从SharedPreferences而不是支持字段读/写的委托.要对字符串执行此操作,例如:
class SharedPrefsString(private val sharedPrefs: SharedPreferences) {
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
return sharedPrefs.getString(property.name, "")
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
sharedPrefs.edit().putString(property.name, value).apply()
}
}
var myString: String by SharedPrefsString(myPrefs)
Run Code Online (Sandbox Code Playgroud)
但是,我希望我可以使用泛型枚举,因为所有枚举都有一个valueOf(string)方法,但下面的方法不起作用.我在评论中提出了一些我尝试过的东西:
class SharedPrefsEnum<T : Enum<T>>(private val sharedPrefs: SharedPreferences) {
operator fun getValue(thisRef: Any?, property: KProperty<*>): T {
// Doesn't work, can't reference T, which makes sense.
// return T.valueOf(sharedPrefs.getString(property.name, ""))
// Can't use reified type here, which makes sense.
// return …Run Code Online (Sandbox Code Playgroud)