我使用以下依赖项来读取 csv 文件:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
下面是我编写的用于读取 csv 文件的代码:
Reader reader = Files.newBufferedReader(Paths.get(file.getPath()));
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT);
for(CSVRecord csvRecord: csvParser) {
System.out.println(csvRecord.get(0));
}
Run Code Online (Sandbox Code Playgroud)
我可以通过上述方法读取csv文件中的每一行。但是 csvParser.getRecords(); 返回空。我想要 CSV 文件中的总行数。我怎样才能做到这一点?
我在一个系统上使用IntelliJIDE armx64 linux-based,我正在处理一个非 Maven java 项目,该项目有很多链接到它的模块(依赖项)。当从 IDE 运行我的项目时,一切正常,但是当将其构建为可运行的 jar 文件并尝试使用从终端运行该 jar 时java -jar myjar.jar,我收到以下错误:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:330)
at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:263)
at java.util.jar.JarVerifier.processEntry(JarVerifier.java:318)
at java.util.jar.JarVerifier.update(JarVerifier.java:230)
at java.util.jar.JarFile.initializeVerifier(JarFile.java:383)
at java.util.jar.JarFile.getInputStream(JarFile.java:450)
at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:977)
at sun.misc.Resource.cachedInputStream(Resource.java:77)
at sun.misc.Resource.getByteBuffer(Resource.java:160)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:454)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at …Run Code Online (Sandbox Code Playgroud) 我有一个问题 - 我有元素 A 列表:
class A {
String fieldA;
int fieldB
}
Run Code Online (Sandbox Code Playgroud)
我想将具有相同 fieldA 的所有元素合并到一个元素,并以这种方式汇总 fieldB 中的所有值:
el1 = AAA 5
el2 = AAA 7
el3 = AAA 2
Run Code Online (Sandbox Code Playgroud)
结果:
one element: AAA 14
Run Code Online (Sandbox Code Playgroud)
如何使用 Java 8 Streams 来做到这一点?
所以最后我的列表的元素必须比开始时少。我必须找到具有相同 fieldA 的所有元素,并将它们合并到具有求和 fieldB 的一个元素。
谢谢你!
我最近使用了很多方法引用和 lambda,并且想知道在运行时是否可以打印以屏幕 lambda 的源(即它的名称),只是出于调试原因。我认为可以使用反射,通过在 getName() 中调用 getClass() 来实现,但我找不到用于查找原始源引用名称的方法。
我有一个功能界面,例如:
@FunctionalInterface
public interface FooInterface {
// function etc etc irrelevant
public void method();
public default String getName() {
// returns the name of the method reference which this is used to define
}
}
Run Code Online (Sandbox Code Playgroud)
然后假设我希望测试运行该界面,并将功能界面的源代码打印到屏幕上。
public static void doStuff(FooInterface f) {
// prints the lambda name that is used to create f
System.out.println(f.getName());
// runs the method itself
f.method();
}
Run Code Online (Sandbox Code Playgroud)
所以如果我这样做:
doStuff(Foo::aMethodReference);
Run Code Online (Sandbox Code Playgroud)
它应该在屏幕上打印类似:“aMethodReference”的内容,这样我就可以知道在运行时正在运行哪些方法,以什么顺序运行等。
考虑到 lambda 不完全是对象,我很怀疑这是可能的,但是嘿,我想可能有一个解决方法。此外,eclipse调试工具只是说它是一个lambda,没有任何其他信息,lambda是否保留任何这些信息?或者在运行时全部丢失?
干杯。(如果有什么区别的话,我正在使用 JDK 11)
我想将 a 转换为具有指定的YearMontha ,例如 2019 年 2 月的第二个星期二。LocalDateDayOfWeek
以下代码抛出DateTimeException:
YearMonth yearMonth = YearMonth.of(2019, Month.FEBRUARY);
TemporalAdjuster secondTuesday = TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.TUESDAY);
LocalDate date = LocalDate.from(yearMonth).with(secondTuesday);
Run Code Online (Sandbox Code Playgroud)
为了使我的代码工作,我需要将最后一行替换为
LocalDate date = yearMonth.atDay(1).with(secondTuesday);
Run Code Online (Sandbox Code Playgroud)
是否有一种不需要使用的更清洁的解决方案atDay(1)?
问题:我有一个接口类型列表,在存储到数据库之前需要将其转换为数据库 DTO 列表。我是 Java 8 流和映射函数的新手,所以任何帮助都会很棒。
研究:我尝试在地图中使用instanceOf,但总是遇到编译错误。
以下是不同的类及其层次结构。
public interface Animal {}
Public Class Cat implements Animal{
private String name;
public void getName() {
return name;
}
}
Public Class Dog implements Animal{
private String name;
public void getName() {
return name;
}
}
Public Class DBAnimalDTO{
private String dbName;
public void setDbName(String name) {
this.dbName = name;
}
}
Run Code Online (Sandbox Code Playgroud)
为了映射 Dog 和 Cat 类,我创建了单独的函数。
Function<Dog, DBAnimalDTO> dogFunction = dog -> {
DBAnimalDTO dbAnimalDTO = new DBAnimalDTO();
dbAnimalDTO.setDbName(dog.getName());
return dbAnimalDTO; …Run Code Online (Sandbox Code Playgroud) 当我尝试将自定义 Expenditure 对象映射到 MySQL 中的关系模型时,出现错误:
Initial SessionFactory creation failed.org.hibernate.MappingException: Could not determine type for: javax.money.MonetaryAmount, at table: Expenditure, for columns: [org.hibernate.mapping.Column(monetaryAmount)]
Run Code Online (Sandbox Code Playgroud)
我的支出类别:
@Entity
public class Expenditure implements Comparable<Expenditure> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String description;
private MonetaryAmount monetaryAmount;
private LocalDate date;
private ExpenditureType type;
@OneToOne
private User client;
...
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下如何进行映射?
给出以下接口:
public interface MyRunnable {
public MyResponse run(int x);
}
Run Code Online (Sandbox Code Playgroud)
它由两个 bean 实现@Stateless:
@Stateless
public class Bean1 implements MyRunnable {
public MyResponse run(int x) {
// some logic
}
}
@Stateless
public class Bean2 implements MyRunnable {
public MyResponse run(int x) {
// some logic
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想根据条件运行一个或另一个 bean。实现这一目标的最佳方法是什么?
这是我尝试过的,但没有成功:
@Stateless
@LocalBean
public class MainBean {
@Inject
private Bean1 bean1;
@Inject
private Bean2 bean2;
public void someMethod(int y) {
MyRunnable runnable = null;
if (y == 1)
runnable …Run Code Online (Sandbox Code Playgroud) 我想编写一个通用函数,它接受同一实体类的两个对象并比较不同的字段,并返回随时间对特定字段所做的所有更改的列表。
许多实体类之一是 Member,如下所示
public class Member {
String firstName;
String lastName;
String driverLicenseNumber;
Integer age;
LocalDateTime timestamp;
}
Run Code Online (Sandbox Code Playgroud)
在数据库中,我有一个名为 member_audit 的表,每当使用触发器在成员表中发生更改时,该表都会填充旧数据(对于其他实体也类似)。
我要返回的每个实体的资源列表类似于
public class MemberAuditsResource {
private String field;
private LocalDateTime on;
private String changeType;
private String oldValue;
private String newValue;
}
Run Code Online (Sandbox Code Playgroud)
我只能想到像这样为每个实体分别编写一个函数
private List<MembeAuditsResource> memberCompare(Member obj1, Member obj2) {
//Compare every field in both the objects using if else and populate the resource.
}
Run Code Online (Sandbox Code Playgroud)
然后调用上面的函数来比较entity_audit表中的每对记录。代码将非常大,无法比较每个字段并乘以不同的实体。有没有更好、更有效的方法呢?
我有实体类列表:
public class Entity
{
private long id;
private List<InnerEnity> data;
public long getId() {
return id;
}
public List<InnerEnity> getData() {
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
这是 InnerEnity 类
public class InnerEnity
{
private long id;
private String data;
public long getId() {
return id;
}
public String getData() {
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
我需要的是 InnerEnity id 列表。为了解决这个问题,我正在尝试类似的事情:-
List innerEnityIds = listOfEnity.stream().map(sys -> sys.getData().stream().map(obj->obj.getId().collect(Collectors.toList())));
Run Code Online (Sandbox Code Playgroud) java ×10
java-8 ×10
java-stream ×3
spring ×2
collections ×1
csv ×1
ejb ×1
jakarta-ee ×1
jar ×1
jpa ×1
lambda ×1
localdate ×1
reflection ×1
spring-boot ×1
time ×1