小编chi*_*tiz的帖子

Java 8 mapToInt和toIntFunction示例

我正在测试Java的新主要更新AKA Java 8非常有趣.我正在使用流,特别是我正在使用这个简单的代码.

private void getAvg()
{
    final ArrayList<MyPerson>persons = new ArrayList<>
    (Arrays.asList(new MyPerson("Ringo","Starr"),new MyPerson("John","Lennon"),new MyPerson("Paul","Mccartney"),new MyPerson("George","Harrison")));                
    final OptionalDouble average = persons.stream().filter(p->p.age>=40).mapToInt(p->p.age).average();
    average.ifPresent(System.out::println);        
    return;
}            
private class MyPerson
{
    private final Random random = new Random();
    private final String name,lastName;
    private int age;
    public MyPerson(String name,String lastName){this.name = name;this.lastName = lastName;this.age=random.nextInt(100);}    
    public MyPerson(String name,String lastName,final int age){this(name,lastName);this.age=age;}    
    public String getName(){return name;}
    public String getLastName(){return lastName;}                   
    public int getAge(){return age;}        
}            
Run Code Online (Sandbox Code Playgroud)

在这个例子中我非常清楚,但后来我也看到也可以用这种方式完成它.

final OptionalDouble average = persons.stream().filter(p->p.age>=40)
.mapToInt(MyPerson::getAge).average();
average.ifPresent(System.out::println);        
Run Code Online (Sandbox Code Playgroud)

我检查了方法 …

java java-8 java-stream

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

升级到Hibernate 4.3.4主方法永远不会终止JVM没有完成

我必须从升级Hibernate 4.2.3Hibernate 4.3.4测试一些JPA 2.1规格.我只改变了这一行code

上一行:

final org.hibernate.service.ServiceRegistry serviceRegistry = new org.hibernate.service.ServiceRegistryBuilder().applySettings(hibConfiguration.getProperties()).buildServiceRegistry();
Run Code Online (Sandbox Code Playgroud)

新增代码行

final org.hibernate.service.ServiceRegistry serviceRegistry = new org.hibernate.boot.registry.StandardServiceRegistryBuilder().applySettings(hibConfiguration.getProperties()).build();
Run Code Online (Sandbox Code Playgroud)

问题我有一个主要方法只是为了测试一些,Criteria APImain method从未完成与最新Hibernate Version我已检索正在运行的线程,并与最新版本的线程如下.

ThreadList:
[threadID:]2  [threadName:] Reference Handler [isDaemon:] true [isAlive:] true
[threadID:]3  [threadName:] Finalizer [isDaemon:] true [isAlive:] true
[threadID:]4  [threadName:] Signal Dispatcher [isDaemon:] true [isAlive:] true
[threadID:]5  [threadName:] Attach Listener [isDaemon:] true [isAlive:] true
[threadID:]10 [threadName:] Abandoned connection cleanup thread [isDaemon:] true [isAlive:] true
[threadID:]11 [threadName:] pool-1-thread-1 …
Run Code Online (Sandbox Code Playgroud)

java multithreading hibernate jpa

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

Java 8减少BinaryOperator用于什么?

我目前正在阅读O'reilly Java 8 Lambdas是一本非常好的书.我遇到过这样的例子.

我有一个

private final BiFunction<StringBuilder,String,StringBuilder>accumulator=
(builder,name)->{if(builder.length()>0)builder.append(",");builder.append("Mister:").append(name);return builder;};

final Stream<String>stringStream = Stream.of("John Lennon","Paul Mccartney"
,"George Harrison","Ringo Starr");
final StringBuilder reduce = stringStream
    .filter(a->a!=null)
    .reduce(new StringBuilder(),accumulator,(left,right)->left.append(right));
 System.out.println(reduce);
 System.out.println(reduce.length());
Run Code Online (Sandbox Code Playgroud)

这产生了正确的输出.

Mister:John Lennon,Mister:Paul Mccartney,Mister:George Harrison,Mister:Ringo Starr

我的问题被认为是reduce最后一个参数的方法BinaryOperator

我的问题是这个参数用于哪个?如果我改变

.reduce(new StringBuilder(),accumulator,(left,right)->new StringBuilder());
Run Code Online (Sandbox Code Playgroud)

如果我通过,NULL那么输出是相同的,然后返回NPE.

这个参数用于什么?

UPDATE

为什么如果我运行它parallelStream我收到不同的结果?

第一次运行.

returned StringBuilder length = 420
Run Code Online (Sandbox Code Playgroud)

第二轮

returned StringBuilder length = 546
Run Code Online (Sandbox Code Playgroud)

第三次运行

returned StringBuilder length = 348
Run Code Online (Sandbox Code Playgroud)

等等?为什么这个...不应该在每次迭代时返回所有值?

任何帮助都非常感激.

谢谢.

java binary-operators java-8

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

WHERE子句中的条件顺序是否会影响MySQL的性能?

给出以下查询:

select ....................
from ......................
where 
(
      lower(c01) like ? 
      or lower(c02) like ? 
      or lower(c5x3_.c01) like ? 
      or lower(5x3_.c02) like ?
 )    
 and(
(
      lower(c03) like ? 
      or lower(c04) like ? 
      or lower(c5x3_.c03) like ? 
      or lower(5x3_.c04) like ?
 )    
 /* ...Multiple further LIKEs... */
 and status=1; /* status is a non-nullable value whose values can only be 1 or 2 */
Run Code Online (Sandbox Code Playgroud)

前10或12个限制是LIKE关于各种模式的 - 我知道这可能很慢,所以总是把状态标准放在第一位,即:

status=1;
 and(other LIKEs)
Run Code Online (Sandbox Code Playgroud)

我的问题:首先应用更简单的限制是否会有性能提升(例如,在这种情况下,被比较的int值不能为空值,只有2个可能的值)?如果LIKE首先放置s并稍后显示状态检查,那么性能是否相同?

假设任何列都没有索引来简化问题.

mysql sql performance where-clause sql-like

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

Java时区转换意味着什么?

我住在委内瑞拉,过去 10 年我们经历了 2 次 GMT 变化。

此代码在 Java 7 update 76 中运行

System.out.println(TimeZone.getTimeZone("America/Caracas"));
Run Code Online (Sandbox Code Playgroud)

哪个打印

sun.util.calendar.ZoneInfo[id="America/Caracas",offset=-16200000,dstSavings=0,useDaylight=false,transitions=5,lastRule=null]
Run Code Online (Sandbox Code Playgroud)

当然,最新的 JDK Java 8 Update 121 在 2016 年底我们有最新的更改。

sun.util.calendar.ZoneInfo[id="America/Caracas",offset=-14400000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null]
Run Code Online (Sandbox Code Playgroud)

我想知道文档中的转换意味着什么。

无法使用自定义时区 ID 指定夏令时转换计划

但在委内瑞拉,没有实行夏令时,我想知道这种特殊情况下的过渡意味着什么,就像历史上格林尼治标准时间的总变化一样?

java timezone

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

这个查询是否可以使用Criteria或DetachedCriteria Hibernate

问题很简单,可以使用Criteria或DetachedCriteria在Hibernate中完成此查询吗?我想不是,但我想做这个问题可能存在一个解决方法.

SELECT
  COLUMNS 
FROM table
WHERE id not in (
    SELECT * FROM (
        SELECT id 
        FROM table
        WHERE
        SOMECONDITIONS   
        ORDER BY timestamp desc limit 0, 15
  ) 
  as t);
Run Code Online (Sandbox Code Playgroud)

我将@Dean Clark的答案标记为正确,但另一个问题出现如下

where can i find the findByCriteria from SessionFactory we are not using Spring 
Run Code Online (Sandbox Code Playgroud)

java mysql hibernate detachedcriteria hibernate-criteria

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

带有哈希索引的 MySQL InnoDB 表

我有一张这样的桌子。

ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Run Code Online (Sandbox Code Playgroud)

后来我创建了一个像这样的哈希索引。

CREATE INDEX index ON table (column) USING HASH;
Run Code Online (Sandbox Code Playgroud)

后来我尝试了一些解释查询。

喜欢

explain Select * from table where column=132;
Run Code Online (Sandbox Code Playgroud)

我看到引擎正在使用 possible_keys 上的索引,并且在关键内容中显示了索引的名称!

但在文档中说 InnoDB 不允许哈希索引现在我想知道为什么我的 innoDB 据说允许哈希索引?

mysql indexing hash

4
推荐指数
2
解决办法
7605
查看次数

Java Exception as checked Exception但不需要在trycatch中抛出

我有这个片段.

public final class StackOverflow{
   class MyException extends Throwable{
   }
   private void a(){
       try{
       }catch(MyException | Exception e){
       }
   }
}
exception StackOverflow.MyException is never thrown in body of corresponding try statement
Run Code Online (Sandbox Code Playgroud)

我知道Exception也在扩展Throwable,也是一个经过检查的异常,MyException也在扩展Throwable,这也是一个经过检查的异常!

我的问题是为什么不需要在try catch中抛出异常,但MyException是?我认为两者都是检查异常所以哪个区别?

对不起,问题很简单.

java exception

4
推荐指数
1
解决办法
89
查看次数

Java Hibernate @OneToMany Criteria Projections返回NULL

我有一对多关系所有者 - >狗.

我将通过ID查询狗以及以EAGER方式引入所有者我使用Hibernate 4.1.6设置此代码而不使用XML映射.我只需要来自DOG和OWNER的一些字段使用Projections Hibernate生成的SQL是完美的,但是我的对象没有填充,因为DOG返回填充的字段但是返回的所有者是 DOG.OWNER==NULL我到目前为止使用的代码...我的entities.other代码省略简洁

@Entity
public class Owner implements Serializable
{
    Set<Dog>dogs=new HashSet<Dogs>(0);
    @OneToMany(fetch=FetchType.LAZY, mappedBy="owner")
    public Set<Dogs> getDogs(){return this.dogs}    
}   

@Entity
public class Dog implements Serializable
{
    private Owner owner;    
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="ownerid")
    public Owner getOwner(){return this.owner;}
 }  
Run Code Online (Sandbox Code Playgroud)

这是我的方法.

public Dog getDogAndOwnerById(Integer dogId) 
{
    Projection p=Projections.projectionList()
    .add(Projections.property("d.id"),"id")
       .add(Projections.property("o.id"),"id");//and others fields
    Session session = getHibernateTemplate().getSessionFactory().openSession();        
    Criteria like = session.createCriteria(Dog.class,"d")
    .add(Restrictions.idEq(dogId)).setProjection(p)
    .setResultTransformer(Transformers.aliasToBean(Dog.class))
    .setFetchMode("owner",FetchMode.JOIN).createAlias("owner","o");        
    Dog dog = (Dog)like.uniqueResult();        
    //Object[]obj=(Object[])like.uniqueResult(); for(Object id:obj)System.out.println(id);
    //System.out.println(obj.length);
    session.close();
    return dog;
    //dog is OK …
Run Code Online (Sandbox Code Playgroud)

java hibernate projection resulttransformer hibernate-criteria

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

Java 8有关finalize方法的断言正确吗?

我正在阅读Kathy Sierra + Bert Bates 撰写的《OCA Java SE 8程序员I考试指南》

关于finalize方法,我不太了解。它在第218页上指出:

调用finalize()实际上可以导致保存对象以免被删除。

稍后在第222页:

您可以从中使对象不符合GC条件finalize()

英语不是我的母语,但是我在两种情况下都了解该finalize()方法可以防止对象被垃圾回收?是这样吗 还是我误解了?

java finalize

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