无法弄清楚如何读取特定建筑物列表中动物的平均体重。
我编写了另一种获取每种动物的动物名称的方法,所以我知道我的持久性正在起作用。
动物园:
public class Zoo {
private List<Animal> animals;
private List<Building> buildings;
public Zoo() {
this.animals = new PersistencyController().giveAnimals();
this.gebouwen = new PersistencyController().giveBuildings();
}
public List<Animal> giveAnimalsByKind(String kindName) {
return animals.stream().filter(animal -> animal.getKind().getName() == kindName).sorted(Comparator.comparing(Animal::getWeight)).collect(Collectors.toList());
}
public double giveAvgWeightForAnimalsInBuilding(String buildingName) {
return animals.stream().collect(Collectors.averagingDouble(Animal::getWeight));
}
}
Run Code Online (Sandbox Code Playgroud)
动物:
public class Animal implements Serializable {
private int nr;
private String name;
private double weight;
private Kind kind;
public Animal(int nr, String name, double weight, Kind kind) {
this.nr = nr;
this.name = …Run Code Online (Sandbox Code Playgroud) public abstract class CommonClass {
abstract void send(<what should i put here???>) {}
}
public class ClassA extends CommonClass {
void send(List<Comments> commentsList) {
// do stuff
}
}
public class ClassB extends CommonClass {
void send(List<Post> postList) {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我是OODP的新手,我正在尝试一种能够接收任何种类的List数据的方法,以便我可以抽象出一些东西。我怎样才能做到这一点?
我创建了一个用户存储SPI,用于对外部数据库中的用户进行身份验证,我可以在KeyCloak的“用户”页面中列出所有用户,并且用户可以从keycloak登录页面http://127.0.0.1:8080/登录auth/realms/dev/account/。但是如果我想从 http://127.0.0.1:8080/auth/realms/dev/protocol/openid-connect/token获取访问令牌,KeyCloak 会抛出异常,如下所示。如果我将缓存策略设置为“默认”,KeyCloak 可以正常工作。
09:18:04,972 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-3) Uncaught server error: java.lang.NullPointerException
at org.keycloak.models.utils.KeycloakModelUtils.resolveAttribute(KeycloakModelUtils.java:415)
at org.keycloak.protocol.oidc.mappers.UserAttributeMapper.setClaim(UserAttributeMapper.java:101)
at org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper.setClaim(AbstractOIDCProtocolMapper.java:119)
at org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper.transformAccessToken(AbstractOIDCProtocolMapper.java:81)
at org.keycloak.protocol.oidc.TokenManager.transformAccessToken(TokenManager.java:553)
at org.keycloak.protocol.oidc.TokenManager.createClientAccessToken(TokenManager.java:411)
at org.keycloak.protocol.oidc.TokenManager$AccessTokenResponseBuilder.generateAccessToken(TokenManager.java:712)
at org.keycloak.protocol.oidc.endpoints.TokenEndpoint.resourceOwnerPasswordCredentialsGrant(TokenEndpoint.java:609)
at org.keycloak.protocol.oidc.endpoints.TokenEndpoint.processGrantRequest(TokenEndpoint.java:190)
Run Code Online (Sandbox Code Playgroud) 我的Android应用程序有一个Room数据库。我的FooDao和BarDao都实现了BaseDao:
interface BaseDao<T> {
@Insert
fun insert(obj: T): Long
@Update
fun update(obj: T)
}
@Dao
interface FooDao: BaseDao<FooEntity> {
@Query("some query")
fun doSomethingWithFoo()
}
@Dao
interface BarDao: BaseDao<BaseEntity> {
@Query("some other query")
fun doSomethingWithBar()
}
Run Code Online (Sandbox Code Playgroud)
我也有一个存储库类:
class MyRepo(private val fooDao: FooDao, private val barDao: BarDao) {
fun doSomethingWithFoo() = fooDao.doSomethingWithFoo()
fun doSomethingWithBar() = barDao.doSomethingWithBar()
}
Run Code Online (Sandbox Code Playgroud)
但是,可以想象FooDao,BarDao和MyRepo不仅具有这两个功能。
我已经了解了有关类委托以启用组合继承的知识。因此,我试图通过让MyRepo委托简单的函数来减少MyRepo的样板,这些简单函数仅调用dao的函数并返回dao的返回值。我应该这样做:
class MyRepo(...): FooDao by fooDao, BarDao by barDao {
//fun doSomethingWithFoo no longer necessary
//fun doSomethingWithBar no longer necessary
}
Run Code Online (Sandbox Code Playgroud)
但是,Android Studio却让我措手不及 Type …
在执行涉及包含 verify.save() 方法的JUnit测试用例时,我收到以下错误“参数不同!” 通缉'
@Test
public void checkCorrectAttemptTest() {
Multiplication multiplication = new Multiplication(50, 60);
User user = new User("abc");
MultiplicationResultAttempt attempt = new MultiplicationResultAttempt(user, multiplication, 3000, false);
MultiplicationResultAttempt verifiedAttempt = new MultiplicationResultAttempt(user, multiplication, 3000, true);
when(userRepository.findByAlias("abc")).thenReturn(Optional.empty());
boolean attemptResult = multiplicaitonServiceImpl.checkAttempt(attempt);
assertThat(attemptResult).isTrue();
verify(attemptRepository).save(verifiedAttempt);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息。
Argument(s) are different! Wanted:
attemptRepository.save(
MultiplicationResultAttempt [user=User [alias=abc], multiplication=Multiplication [factorA=50, factorB=60], resultAttempt=3000, correct=true]
);
-> at microservices.book.multiplication.service.MultiplicationServiceImplTest.checkCorrectAttemptTest(MultiplicationServiceImplTest.java:60)
Actual invocation has different arguments:
attemptRepository.save(
MultiplicationResultAttempt [user=User [alias=abc], multiplication=Multiplication [factorA=50, factorB=60], resultAttempt=3000, correct=true]
);
-> …Run Code Online (Sandbox Code Playgroud) 我编写了一个函数,用于根据requestparams从数据库中获取信息。以下if-else语句是一个巨大的问题。如果我们继续添加更多过滤器,则需要继续为所有可能的路径添加语句。
fun getMessages(name: String, pageable: Pageable, locale: String?, subject: String?,
recipient: String?): Page<MessageDTO>? {
val messagePageable= if (!locale.isNullOrEmpty() && !subject.isNullOrEmpty() && !recipient.isNullOrEmpty()) {
messageRepository.findAll(where(hasMessageName(name).and(hasLocale(locale!!)
.and(hasSubject(subject!!).and(hasRecipient(recipient!!))))), pageable)
} else if (!locale.isNullOrEmpty()) {
messageRepository.findAll(where(hasMessageName(name).and(hasLocale(locale!!))), pageable)
} else if (!subject.isNullOrEmpty()) {
messageRepository.findAll(where(hasMessageName(name).and(hasSubject(subject!!))), pageable)
} else {
messageRepository.findAll(where(hasMessageName(name)), pageable)
}
return messagePageable.map { messageMapper.toMessageDTO(it) }.takeIf { it.content.isNotEmpty() }
}
Run Code Online (Sandbox Code Playgroud)
应该有一个更好的书面方式。我感谢您的帮助。
我有一个测试来验证空对象的返回(如果该对象的字符串属性与预先确定的值不匹配)。我的代码是
import guru.springframework.sfgpetclinic.model.Speciality;
import guru.springframework.sfgpetclinic.repositories.SpecialtyRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.BDDMockito.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.then;
@ExtendWith(MockitoExtension.class)
class SpecialtySDJpaServiceTest {
@Mock
SpecialtyRepository specialtyRepository;
@InjectMocks
SpecialtySDJpaService service;
@Test
void testSaveLambdaNoMatch() {
// Given
final String MATCH_ME = "MATCH_ME";
Speciality speciality = new Speciality();
speciality.setDescription("Not a match");
Speciality savedSpeciality = new Speciality();
savedSpeciality.setId(1L);
// Need mock to only return on match …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现类似以下C的类似数据类定义:
struct A {
int b;
struct {
int d;
} c;
};
Run Code Online (Sandbox Code Playgroud)
According to Dmitry Jemerov it is possible, but he didn't provide any code sample. https://discuss.kotlinlang.org/t/is-there-a-reason-for-not-allowing-inner-data-classes/2526/5
You can simply make it nested inside another class. Nested classes can be data classes.
How it should be done if it is true?
在Kotlin中,还有其他的“ Kotlin”方法可以执行以下操作吗?
fun parse(inputSample: Sample): List<String> =
when {
inputSample.foo != null -> parse(inputSample.foo)
inputSample.bar != null -> parse(inputSample.bar)
else -> emptyList()
}
Run Code Online (Sandbox Code Playgroud)
我怀疑nullwith的支票when可以用Kotlin写成不同的形式
要求用户输入温度,然后用户输入数字,后跟摄氏温度或华氏温度的C或F。然后程序将识别温度以及测量温度的单位-使用此数据可以告诉您“水”是固态,液态还是气态。
我尝试了以下
public static void main(String[] args) {
Scanner myScan = new Scanner(System.in);
System.out.print("Enter THE temp: ");
String ent = myScan.next();
int temp = Integer.parseInt(ent.substring(0,4));
//char type = ent.charAt();
//System.out.println(temp);
// System.out.println(type);
if (temp >= 100) {
System.out.println("The water is gaseous");
} else if (temp < 0) {
System.out.println("The water is solid");
} else {
System.out.println("the water is liquid");
}
}
Run Code Online (Sandbox Code Playgroud)
当我将(0,4)放入temp子字符串中时,我会认为输出将是输入的前3个数字。相反,当我输入1 int或3时,我得到一个错误“ java.lang.StringIndexOutOfBoundsException”。
java ×7
kotlin ×4
generics ×2
mockito ×2
android-room ×1
collectors ×1
data-class ×1
if-statement ×1
java-8 ×1
java-stream ×1
junit ×1
junit5 ×1
keycloak ×1
lambda ×1
rest ×1
simplify ×1
spring-boot ×1
substring ×1