我知道使用的优点PreparedStatement,这些都是
但我想知道我们何时使用它而不是Statement?
我有一个流如:
Arrays.stream(new String[]{"matt", "jason", "michael"});
Run Code Online (Sandbox Code Playgroud)
我想删除以相同字母开头的名称,以便只留下以该字母开头的一个名称(无关紧要).
我试图了解该distinct()方法的工作原理.我在文档中读到它基于对象的"等于"方法.但是,当我尝试包装String时,我注意到从不调用equals方法,也没有删除任何内容.这里有什么我想念的吗?
包装类:
static class Wrp {
String test;
Wrp(String s){
this.test = s;
}
@Override
public boolean equals(Object other){
return this.test.charAt(0) == ((Wrp) other).test.charAt(0);
}
}
Run Code Online (Sandbox Code Playgroud)
还有一些简单的代码:
public static void main(String[] args) {
Arrays.stream(new String[]{"matt", "jason", "michael"})
.map(Wrp::new)
.distinct()
.map(wrp -> wrp.test)
.forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud) 如果您已经对数字进行了素数分解,那么获得该数字的所有因子的最简单方法是什么?我知道我可以从2循环到sqrt(n)并找到所有可分的数字,但这似乎效率低,因为我们已经有了素数分解.
我想它基本上是组合/选择功能的修改版本,但我似乎找到的只是计算组合数量的方法,以及计算因子数量的方法,而不是实际生成组合/因子.
我注意到,与TERM设置为环境变量xterm或者xterm-256color是Mac OS X的Terminal.app实用尊重大多数ANSI转义码,当为至少那些转义代码涉及到更改文本颜色.
例如:
echo -e "\033[0;31mERROR:\033[0m It worked"
Run Code Online (Sandbox Code Playgroud)
生产:
但是,我对ANSI转义码提供的光标位置操作功能更感兴趣.不幸的是,这种类型的代码在Terminal.app中似乎没有太好用,我已经能够收集到了.例如,我想要做的是这样的事情:
echo -e "\033[sHello world\033[uG'day"
Run Code Online (Sandbox Code Playgroud)
ESC[s保存当前光标位置,同时ESC[u恢复上次保存的位置.由于运行上面的脚本,我希望"G'day"中的五个字符在重新定位光标后覆盖"Hello"的五个字符,产生以下结果:
G'day world
Run Code Online (Sandbox Code Playgroud)
实际上,这正是我用iTerm2.app,ConEmu for Windows(运行MinGW或MSYS Git的bash.exe副本)等所得到的.然而,我在Terminal.app中看到的是:
Hello worldG'day
Run Code Online (Sandbox Code Playgroud)
有没有理由这样做,除了Terminal.app之外,只是缺乏对这些代码的支持?有没有办法启用此功能?我有可能有错误配置的东西吗?我的TERM设置?别的什么?
我一直在各处搜索,但没有发现任何与Terminal.app相关的内容.我觉得很奇怪它会通过ANSI转义码支持彩色文本,但不会通过完全相同的技术重新定位光标.这似乎是一个相当明确的标准的相当随意的子集.这就是让我觉得我有一些错误配置的东西,而不是说Terminal.app是应该责备的......但是,我认为它可能根本无法完成.(可能是iTerm2首先存在的原因之一?)
如果有人能对这种情况有所了解,我们将不胜感激!
所以,我做了一些阅读和实验,并发现了以下奇怪之处:
在查看下面的nm答案之后,我决定将返回的字节写出来,tput以查看它们与常规ANSI指令的不同之处.
$ echo "$(tput sc)Hello world$(tput rc)G'day" > out.bin
$ cat -e out.bin
^[7Hello world^[8G'day$
Run Code Online (Sandbox Code Playgroud)
看起来一切正常,如果我把它的序列ESC 7和ESC 8,但如果我把它ESC [s和ESC [u分别,这是我理解的事情是ANSI SCP和RCP代码(保存光标位置较典型的代表性和还原光标位置, ).由于输入ASCII十进制字符7或8在转义的八进制字节表示旁边是不可能的(\0337!= …
想象一下,我有100个SELECT查询,它们因一个输入而不同.PreparedStatement可用于该值.
我在Web上看到的所有文档都是批量插入/更新/删除.我从未见过用于select语句的批处理.
可以这样做吗?如果是这样,请在下面的示例代码中帮助我.
我想这可以使用"IN"子句来完成,但我更喜欢使用批处理的select语句.
示例代码:
public void run(Connection db_conn, List value_list) {
String sql = "SELECT * FROM DATA_TABLE WHERE ATTR = ?";
PreparedStatement pstmt = db_conn.prepareStatement(sql);
for (String value: value_list) {
pstmt.clearParameters();
pstmt.setObject(1, value);
pstmt.addBatch();
}
// What do I call here?
int[] result_array = pstmt.executeBatch()
while (pstmt.getMoreResults()) {
ResultSet result_set = pstmt.getResultSet();
// do work here
}
}
我想这也可能是依赖于驱动程序的行为.我正在使用他们的JDBC驱动程序编写针对IBM AS/400 DB2数据库的查询.
我有一些JSON,我使用Gson反序列化.
{
"resp": {
"posts": [
{
...
"public": true,
...
}]
}
Run Code Online (Sandbox Code Playgroud)
我的问题是它public是一个Java关键字,那么我如何在我的类中创建一个与publicJSON中的字段相关的字段?
我有这个函数来确定列表是否是另一个列表的轮换:
def isRotation(a,b):
if len(a) != len(b):
return False
c=b*2
i=0
while a[0] != c[i]:
i+=1
for x in a:
if x!= c[i]:
return False
i+=1
return True
Run Code Online (Sandbox Code Playgroud)
例如
>>> a = [1,2,3]
>>> b = [2,3,1]
>>> isRotation(a, b)
True
Run Code Online (Sandbox Code Playgroud)
如何使用重复项进行此操作?例如
a = [3,1,2,3,4]
b = [3,4,3,1,2]
Run Code Online (Sandbox Code Playgroud)
它可以及时完成O(n)吗?
有没有简单的方法来初步确定了文件的处理请求,忽略得到的参数和操作(至少基本)的映射,比如/到/index.php?
理想情况下,我正在寻找的是类似的东西$_SERVER['REQUEST_URI'],除了它返回相同的值,无论get参数如何,该值是请求的文件,而不是URI,也不是当前正在执行的文件($_SERVER['PHP_SELF']).换句话说,一个$_SERVER['REQUESTED_FILE']或什么的.我没见过这样的东西.它是否存在,还是需要手动编写?
更新 以下是一些示例网址与我希望的结果配对:
example.com/mypage.php : /mypage.php
example.com/ : /index.php
example.com/foo/?hello=world : /foo/index.php
Run Code Online (Sandbox Code Playgroud)
即使在包含的文件中,这些返回值也是如此.在回答之前看到我的答案,我想我找到了我想要的东西.
我正在实现一些可能从某些时候使用弱引用中受益的行为.我希望班级的用户能够在施工时指出是否是这种情况.由于WeakReference延伸Reference乍一看这似乎我可以做这样的事情(这是一个样机,没有什么,我实际上是想这样做):
public class Container<T> {
private boolean useWeakRef;
private Reference<T> ref;
public Container(boolean isWeak) {
useWeakRef = isWeak;
}
public void store(T val) {
if(useWeakRef) {
ref = new WeakReference<>(val);
} else {
ref = new StrongReference<>(val);
}
}
// May return null
public T get() {
return ref.get();
}
}
Run Code Online (Sandbox Code Playgroud)
但是没有StrongReference类,根据参考javadocs:
由于引用对象是与垃圾收集器密切配合实现的,因此该类可能不会直接进行子类化.
因此,我无法创建自己的Reference子类,该子类包含对象的强(即正常)引用.这似乎意味着不可能创建一个隐藏它是否使用来自调用者的弱(或软)引用的类.
我真的不明白为什么这个类不存在,一个StrongReference对象应该总是从get()返回对象,除非调用了clear().这为什么会丢失?是否StrongReference与Reference某种方式不一致?这将使构建通用引用持有者对象变得更加简单.
如何提取字符串"("和")"使用模式匹配或任何东西.例如,如果文本是`
"你好(Java)"
然后如何获得"Java".
谢谢.