标签: java-8

为什么 Java 8 使用 null 时,Guava 的Optional 使用抽象类?

当Java 8发布时,我期望发现它的Optional实现与Guava的基本相同。从用户的角度来看,它们几乎是相同的。但是Java 8的Optional在内部使用null来标记一个空的Optional,而不是使Optional抽象并有两个实现。除了 Java 8 的版本感觉不对(你只是通过隐藏你实际上仍在使用它们的事实来避免空值)之外,每次你想访问它时检查你的引用是否为空不是效率较低吗?而不是仅仅调用一个抽象方法?也许不是,但我想知道他们为什么选择这种方法。

java null guava java-8

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

ModelMapper 处理 java 8 可选 <MyObjectDto> 字段到可选 <MyObject>

我一直在应用程序周围使用 modelmapper 和 java 8Options,它们工作得很好,因为它们是原始类型;直到我将模型对象的字段之一更改为可选类型。然后一切都崩溃了。事实证明,许多库不能很好地处理泛型。

这是结构

public class MyObjectDto
{
   private Optional<MySubObjectDto> mySubObject;
}

public MyObject
{
   privae Optional<MySubjObject> mySubObject;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试映射MyObjectDto到时MyObject, modelmapper 调用

public void setMySubObject(Optional<MySubObject> mySubObject){
   this.mySubObject = mySubObject;
}
Run Code Online (Sandbox Code Playgroud)

with Optional<MySubObjectDto>,我不明白这怎么可能(它们之间没有继承)。当然,崩溃得很快。现在我已经改变了我的设置器以接受 Dto 类型只是为了度过这一天,但这从长远来看是行不通的。有没有更好的方法来解决这个问题,或者我应该创建一个问题?

java java-8 modelmapper option-type

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

Java 8 句子流

I\xe2\x80\x99d 喜欢使用 Java 8 流来获取字符串流(例如从纯文本文件中读取)并生成句子流。我认为句子可以跨越界限。

\n\n

例如,我想从:

\n\n
"This is the", "first sentence.  This is the", "second sentence."\n
Run Code Online (Sandbox Code Playgroud)\n\n

到:

\n\n
"This is the first sentence.", "This is the second sentence."\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以看到它 \xe2\x80\x99s 可以得到句子部分的流,如下所示:

\n\n
Pattern p = Pattern.compile("\\\\.");\nStream<String> lines\n   = Stream.of("This is the", "first sentence.  This is the", "second sentence.");\n\nStream<String> result = lines.flatMap(s -> p.splitAsStream(s));\n
Run Code Online (Sandbox Code Playgroud)\n\n

但后来我\xe2\x80\x99m 不确定如何生成一个流来将片段连接成句子。我想以一种惰性的方式执行此操作,以便仅读取原始流中需要的内容。有任何想法吗?

\n

java java-8 java-stream

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

当应用程序在 Linux 中通过 crontab 运行时,Log4j2 日志记录不起作用

我有一个java应用程序,在其中实现了日志记录。这是文件

log4j2.xml

<configuration xmlns:xi="http://www.w3.org/2001/XInclude" status="WARN">
    <xi:include href="log4j-xinclude-appenders.xml" />
    <xi:include href="log4j-xinclude-loggers.xml" />  
</configuration>
Run Code Online (Sandbox Code Playgroud)

log4j-xinclude-appenders.xml

<appenders>

    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <Routing name="RoutingAppender">
        <Routes pattern="${ctx:logFileName}">
            <Route>
                <RollingFile name="Rolling-${ctx:logFileName}"
                         fileName="logs/${ctx:logFileName}.log"
                         filePattern="logs/${ctx:logFileName}-%d{MM-dd-yyyy}-%i.log">
                    <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %c{36} %l: %msg%n"/>
                    <SizeBasedTriggeringPolicy size="5 MB" />
                    <DefaultRolloverStrategy min="1" max="4" />
                </RollingFile>
            </Route>

            <Route ref="Console" key="${ctx:logFileName}"/>
        </Routes>
    </Routing>

</appenders>
Run Code Online (Sandbox Code Playgroud)

log4j-xinclude-loggers.xml:

<loggers>

    <root level="warn">
        <appender-ref ref="Console" />
    </root>

    <logger name="abc.def.ghi.regulators" level="info" additivity="false">
        <appender-ref ref="RoutingAppender" />       
    </logger>

    <logger name="org.apache" level="info" />
    <logger name="org.springframework" level="info" …
Run Code Online (Sandbox Code Playgroud)

linux cron java-8 log4j2

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

如何将 Java 8 与 MS Access 连接?

我在使用 ms access 数据库在 java 中制作登录页面时遇到一些问题。它没有从 MS Access 数据库获取用户名和密码。

try
{
String user=t.getText().trim();
String pass=t1.getText().trim();
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con1=DriverManager.getConnection("jdbc:odbc:balogin");
Statement stat;
stat=con1.createStatement();
ResultSet rs=stat.executeQuery("select * from Table1 where user='"+user+"' and pass='"+pass+"'");
System.out.println("select * from Table1 where user='"+user+"' and pass='"+pass+"'");
int count=0;
while(rs.next())
{
{count=count+1;}
if(count==1)
{
JOptionPane.showMessageDialog(null,"User Found,Access Granted");
ControlPanel cp1=new ControlPanel();
cp1.display();
}
else
{
JOptionPane.showMessageDialog(null,"User not found");
}
}
}
Run Code Online (Sandbox Code Playgroud)

java ms-access jdbc-odbc java-8

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

Java 8 将 HashSet 转换为 HashMap

我正在尝试使用 lambda 和 Collectors 转换hashsethashmapJava 8,但我失败了。下面是我的代码:

Set<String> set = new HashSet<String>();
set.add("1");
set.add("2");
set.add("3");
HashMap<String, Integer> map = set.stream().collect(Collectors.toMap(x -> x, 0));
Run Code Online (Sandbox Code Playgroud)

但上面给出的错误如下:

The method toMap(Function<? super T,? extends K>, Function<? super T,? extends U>) in the type Collectors is not applicable for the arguments ((<no type> x) -> {}, int)
Run Code Online (Sandbox Code Playgroud)

我是 lambda 的新手。有什么帮助吗?

java lambda dictionary set java-8

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

SpringMVC hibernate-validator java.lang.ClassNotFoundException:javax.validation.ValidatorFactory

我知道这是一个常见的错误,我尝试解决这个问题,但我不能。我厌倦了使用最新的休眠验证器和旧版本,但这对我没有帮助。我用的是tomcat7。

错误 500:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0': Invocation of init method failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean] for bean with name 'validator' defined in ServletContext resource [/WEB-INF/spring/webcontext/DispatcherServlet-context.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory
Related cause: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean] for bean with name 'validator' defined in ServletContext resource [/WEB-INF/spring/webcontext/DispatcherServlet-context.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory
Run Code Online (Sandbox Code Playgroud)

我的 pom.xml:

<modelVersion>4.0.0</modelVersion>
<groupId>com.virnikandrapid</groupId>
<artifactId>microblog</artifactId>
<version>0.0.2-SNAPSHOT</version> …
Run Code Online (Sandbox Code Playgroud)

spring spring-mvc bean-validation java-8

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

在 Java 流中使用 printf

我是使用 lambda 和流的新手。我正在尝试打印一个已排序并删除重复项并格式化的 ArrayList。我知道以下方法会起作用:

list.stream().distinct().forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)

这将产生 ADFJKLXZ 或我列表中的任何随机字符的输出。但是,我希望输出看起来像 A、D、F、J、K、L、X、Z

我已经尝试过这个:

list.stream().distinct().forEach(System.out::printf("%s, ", ));
Run Code Online (Sandbox Code Playgroud)

我想我可能仍然对 :: 为什么上面的代码不起作用以及我该如何修复它有一些困惑?

java printf java-8 java-stream

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

threadLocal 中的“withInitial”与“InitialValue”

我对threadLocal的initialValuewithInital方法有点困惑。

考虑一种情况,我在父线程中有数据,并且我正在使用InheritableThreadLocal.

public class Parent extends Thread {
public static ThreadLocal<String> data = new InheritableThreadLocal<String>() {
    @Override
    protected String initialValue() {
        return "temp";
    }
};

public static void main(String[] args) {
    new Parent().start();
}

public void run() {
    data.set("parent data");
    System.out.println("Parent Thread Value :" + data.get());
    new ChildThread().start();
}

class ChildThread extends Thread {
    public void run() {
        System.out.println("Child Thread Value :" + Parent.data.get());
    }
}
}
Run Code Online (Sandbox Code Playgroud)

输出:

Parent Thread Value : parent data …
Run Code Online (Sandbox Code Playgroud)

java multithreading thread-local java-8 inheritable-thread-local

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

获取 Java 8 的最后日期

我可以看到 Java 8 新的日期时间 API 有很多类 LocalDateTime、LocalDate、LocalTime。我可以得到一年中的第一个日期,例如:

LocalDateTime first = LocalDateTime.of(LocalDate.now().getYear(), 1, 1, 0, 0);
Run Code Online (Sandbox Code Playgroud)

如何在 Java 8 新日期时间 API 中获取一年的最后一天?

java java-8

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