小编Moh*_*nan的帖子

354
推荐指数
6
解决办法
36万
查看次数

选择项目或键入输入与列表中的项目匹配时,HTML5 datalist的jQuery事件

我有像下面的数据列表 -

<input id="name" list="allNames" />
<datalist id="allNames">
    <option value="Adnan1"/>  
    <option value="Faizan2"/>   
</datalist>
Run Code Online (Sandbox Code Playgroud)

我想要的是,当一个项目被完全输入时(例如在用户完全键入"Adnan1"时输入框中)或从列表中选择,那么我想要一个事件.我尝试了几种方法,但到目前为止两种方法都没有帮助我.方法是 -

$("#name").change(function(){
console.log("change");
}
Run Code Online (Sandbox Code Playgroud)

问题是,当输入失焦时,事件才会被触发,即当我点击屏幕中的某个位置时.

我也试过了

$("#name").bind('change', function () {
    console.log('changed'); 
});
Run Code Online (Sandbox Code Playgroud)

但每次输入时都会触发回调.实际上,当项目被完全选中时,我需要进行AJAX调用.通过输入或从下拉列表中选择.

第一种方法对于用户的观点是不好的,因为他必须进行额外的点击,而第二种方法的缺点是每个字母都会触发一个事件.

我想要的只是当用户做出选择或输入完整句子时的事件.有没有办法实现这个目标?我遗失的任何事件都可以解决我的问题.

html javascript jquery jquery-events

25
推荐指数
2
解决办法
5万
查看次数

通过使用java 8流对集合进行排序,将集合转换为Map

我有一个列表,我需要自定义排序,然后转换为具有其Id与名称映射的地图.

这是我的代码:

Map<Long, String> map = new LinkedHashMap<>();
list.stream().sorted(Comparator.comparing(Building::getName)).forEach(b-> map.put(b.getId(), b.getName()));
Run Code Online (Sandbox Code Playgroud)

我认为这将完成这项工作,但我想知道我是否可以避免LinkedHashMap在这里创建并使用花哨的函数式编程来完成一行中的工作.

java collections linkedhashmap java-8

16
推荐指数
1
解决办法
1万
查看次数

Guava Joiner无法使用前缀和后缀

我在Joiner中要求能够使用前缀和后缀元素.

例如

String str[] = {"a", "b", "c"};
Joiner.on(",").prefix("'").suffix("'").join(str);
Run Code Online (Sandbox Code Playgroud)

预期产出将是:

'a','b','c'
Run Code Online (Sandbox Code Playgroud)

我们有替代方案吗?因为番石榴不这样做(或者我不知道).使用java 8有更好的选择吗?

java google-api guava

6
推荐指数
2
解决办法
3903
查看次数

Spark 2.0 DataSets groupByKey并划分操作和类型安全

我非常满意Spark 2.0 DataSet,因为它的编译时类型安全.但是这里有几个我无法解决的问题,我也没有找到好的文档.

问题#1 - 在聚合列上划分操作 - 考虑下面的代码 - 我有一个DataSet [MyCaseClass],我想在c1,c2,c3和sum(c4)/ 8上groupByKey.如果我只是计算sum但它给出了除(8)的编译时错误.我想知道如何实现以下目标.

final case class MyClass (c1: String,
                          c2: String,
                          c3: String,
                          c4: Double)

    val myCaseClass: DataSet[MyCaseClass] = ??? // assume it's being loaded

    import sparkSession.implicits._
    import org.apache.spark.sql.expressions.scalalang.typed.{sum => typedSum}

     myCaseClass.
       groupByKey(myCaseClass =>
          (myCaseClass.c1, myCaseClass.c2, myCaseClass.c3)).
          agg(typedSum[MyCaseClass](_.c4).name("sum(c4)").
          divide(8)). //this is breaking with exception
       show()
Run Code Online (Sandbox Code Playgroud)

如果我删除.divide(8)操作并运行上面的命令它会给我低于输出.

+-----------+-------------+
|        key|sum(c4)      |
+-----------+-------------+
| [A1,F2,S1]|         80.0|
| [A1,F1,S1]|         40.0|  
+-----------+-------------+
Run Code Online (Sandbox Code Playgroud)

问题#2 - 将groupedByKey结果转换为另一个Typed DataFrame - 现在问题的第二部分是我想再次输出一个类型化的DataSet.为此,我有另一个案例类(不确定是否需要),但我不确定如何映射分组结果 -

final case class AnotherClass(c1: String,
                          c2: …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql apache-spark-dataset

6
推荐指数
1
解决办法
5404
查看次数

将CustomObject列表转换为Guava Table集合,复杂性较低

我有

class CustomObject {
Integer day;
List<InnerObject> innerObjects;
///getter setter

}

class InnerObject {
String id;
List<String> someVal;
//getter setter

}
Run Code Online (Sandbox Code Playgroud)

我有一个

List<CustomObject>

而且我要

Table<String, Integer, List<String>>

我希望表代表id (from InnerObject)- >(day (from Custom object),List of someVal (from InnerObject)

为了使它干净我调整了一点名称,但结构与预期相同.

现在我的表现如何

final List<CustomObject> objects = ???
final Map<Integer, List<InnerObject>> dayVsInnerObjects = objects.stream()
.collect(toMap(CustomObject::getDay, CustomObject::getInnerObjects));


final Table<String, Integer, List<String>> table = HashBasedTable.create();

 dayVsInnerObjects.forEach((day, innerObjects) -> 
                            innerObjects.forEach(i -> {
                             table.put(i.getId(), day, i.getSomeVal());
            })
);
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 有没有更好的方法呢?可能是一个更好的番石榴/收集API,可以使它更清洁.
  2. 现在正在填充表,它是可变的.我们可以在创建它时让它变得不可变.
  3. 时间复杂度如果可以在这里减少.

lambda guava java-8

6
推荐指数
1
解决办法
665
查看次数

python中datetime模块的isoformat函数返回错误的偏移量

所以我有 -

timezone = pytz.timezone('Asia/Kolkata')
one_time_stamp = '2017-06-01 05:30:00'

zoned_time_stamp = datetime.datetime.strptime(one_time_stamp, '%Y-%m-%d %H:%M:%S')

#This outputs 2017-06-01 05:30:00 which is fine.
print(zoned_time_stamp)

#notice timezone added
non_iso_zoned_ts = zoned_time_stamp.replace(microsecond=0, tzinfo=timezone)
# This outputs 2017-06-01 05:30:00 which is fine.
print(zoned_time_stamp)

iso_date = non_iso_zoned_ts.isoformat()
#This outputs 2017-06-01T05:30:00+05:53 which is incorrect. Ideally it should be 2017-06-01T05:30:00+05:30
print(iso_date)
Run Code Online (Sandbox Code Playgroud)

现在我想知道为什么 isoformat 添加了 05:53 的偏移量,而亚洲/加尔各答时区是 +05:30。参考 - https://www.zeitverschiebung.net/en/timezone/asia--kolkata

python pytz python-datetime

5
推荐指数
1
解决办法
226
查看次数

使用继承映射的一对多JPA映射

我有一个场景.

@Entity
@Table(name = "someTable")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Access(AccessType.FIELD)
@DiscriminatorColumn(name = "someDisc")
public abstract class AbstractClass{}
Run Code Online (Sandbox Code Playgroud)

@Entity
@Access(AccessType.FIELD)
@DiscriminatorValue("1")
public class Child1 extends AbstractClass{
}

@Entity
@Access(AccessType.FIELD)
@DiscriminatorValue("2")
public class Child2 extends AbstractClass{
}
Run Code Online (Sandbox Code Playgroud)

现在在第3个表中我想要这样的东西

@Entity
@Table
public class ThridTable{

    @OneToMany(cascade = CascadeType.ALL, fetch = EAGER, orphanRemoval = true)
    @JoinColumn(name = "foreinKeyCol", nullable = false)
    @OrderColumn(name = "orderCol")
    private List<Child2> child2 = new ArrayList<>();


    @OneToMany(cascade = CascadeType.ALL, fetch = EAGER, orphanRemoval = true)
    @JoinColumn(name = "foreinKeyCol", nullable = false) …
Run Code Online (Sandbox Code Playgroud)

java annotations hibernate jpa java-ee

3
推荐指数
1
解决办法
2977
查看次数

如何添加新值以动态地或使用插件在jira中选择列表字段

这是我的用例.
1.我有一个"客户名称"文本字段和"所有客户"单选列表.
2.问题解决后,我想选择"客户名称"中的值,并希望添加"所有客户".

我能够实现这一目标如果要添加的值已经存在于"所有客户"中.但是我希望在"所有客户"字段中填入新值(如果它尚未出现),以便将来可供选择.这该怎么做?有可能这样做吗?

jira jira-plugin jira-rest-java-api

3
推荐指数
1
解决办法
7633
查看次数

泛型在使用instanceOf检查的内部类中表现得很奇怪

看代码

public class AdnanTestClass<T> {

    public void doForTest(Object o){
        if (o instanceof TestInnerClass){

        }
    }

    private class TestInnerClass{

    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码在doForTest方法中给出了编译时错误.它说非法的仿制药类型.

如果我用这样的外类限定内部类

    if (o instanceof AdnanTestClass.TestInnerClass){

    }
Run Code Online (Sandbox Code Playgroud)

这个编译完全没问题.

if (o instanceof TestInnerClass)如果我<T>从我的班级声明中删除也会有效.

我不确定我在这里失踪了什么.是否存在符合外部资格的潜在问题.有人可以指出吗?我用intellij idea 14和Java 8做了这个测试.

java generics intellij-idea

3
推荐指数
1
解决办法
936
查看次数

更好的方法来创建一个限制用户只传递一种枚举的方法

我有一个接口,只能被枚举覆盖 -

interface Parent{
    int someMethod(); 
}
Run Code Online (Sandbox Code Playgroud)

以及我要传递Parent的实现者的方法.此方法希望限制用户传递除枚举之外的任何其他实现者 -

public static <T extends Enum<? extends Parent>> T fromInt(Class<T> enumClass){}
Run Code Online (Sandbox Code Playgroud)

现在的问题是

  1. 枚举签名是不洁的加上使用?.
  2. 为了访问someMethod父类,需要在方法中输入类型.如果我们想像这样访问它 -

    Arrays.stream(enumClass.getEnumConstants())
                .filter(ev -> ((Parent)ev).someMethod() == someVal)
                .findFirst().get();
    
    Run Code Online (Sandbox Code Playgroud)

是否有更好的方法来创建此方法的签名来解决这些问题?

java enums

2
推荐指数
1
解决办法
39
查看次数

将命令行参数 key=value 对转换为 scala 中的 Map

在我的主程序中,我收到类似 - key1=value1 key2=value2 的输入

现在我想要的是用它创建一个地图。我知道执行此操作的命令式方法,我将获得可以 foreach 的 Array[String],然后用“=”分割,然后可以使用键和值来形成 Map。

有没有一种好的功能性和可读性的方法来实现这一点?另外,如果我可以避免可变映射并且我想避免初始虚拟值初始化,那就太好了。

  def initialize(strings: Array[String]): Unit = {
    val m = collection.mutable.Map("dummy" -> "dummyval")
    strings.foreach(
      s => {
        val keyVal:Array[String] = s.split("=")

        m += keyVal(0) -> keyVal(1)

      })
    println(m)
  }
Run Code Online (Sandbox Code Playgroud)

scala scala-collections

2
推荐指数
1
解决办法
1981
查看次数

Java 8泛型类型转换在使用java 7传递时失败

我遇到了这个问题,因此将其作为完整解决方案发布 -

使用Java 8,以下代码将失败并出现运行时异常.问题是getInteger方法返回一个通用的Integer类型,print方法需要精确的Object Type.

public static void main(String[] args) {
    print(getInteger());
}

private static <T> T getInteger() {
    return (T)new Integer(10);
}

private static void  print(Object...o1){
    for(Object o: o1){
       System.out.println(o);
    }
}
Run Code Online (Sandbox Code Playgroud)

java java-8

-2
推荐指数
1
解决办法
304
查看次数