абстрактный класс реализует базовый функционал, а классу наследнику передается лишь определенная часть функционала?
Animal{}
может и не уметь "говорить", поэтому метод void say(){}
ему задавать не надо. И Fish extends Animal{}
не будет иметь этого метода, а Dog extends Animal{}
будет.void move();
, а потомки будут обязаны его реализовать: птичка будет летать, рыбка плавать, а собачка бегать. <div class="container" style="height: 100vh; border: black solid " >
<div class="row h-100">
<div class="col-1">
<p>MENU</p>
<p>MENU</p>
<p>MENU</p>
</div>
<div class="col-3 h-100 overflow-auto">
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
.......................
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
</div>
</div>
</div>
vh
- это попугаи, аналогичные процентам (проценты почему-то не работают). console.log('----------> ', typeof this.criteria.to, this.criteria.to);
object
, а если сначала выбрать, а потом нажать - уже string
! И ладно что пикеры выдают string (хотя как ладно, мне ещё предстоит валидация полей: чую будет гимор), так ещё и TypeScript меняет тип переменной, хотя в интерфейсе чётко задано: Date. Как так-то?!...........
to: new Date().toISOString().split('T')[0],
...........
model
это экземпляр товара. Тогда все товары хранятся в какой-то коллекции, например, List<Model> list = ..............
int total = list.stream()
.mapToInt(model -> Integer.parseInt(model.getPrice())*Integer.parseInt(model.getTovarValue()))
.sum();
@GetMapping("/list")
List<AuditAssetItem> getChangesByCriteria(
@RequestParam int assetid,
@RequestParam String from,
@RequestParam String to,
@RequestParam boolean item,
@RequestParam boolean rights,
@RequestParam boolean extended
) {
return service.getAuditListByCriteria(assetid, from, to, item, rights, extended);
}
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--https://docs.spring.io/spring-boot/docs/2.7.6/reference/html/features.html#features.logging-->
<!--https://docs.spring.io/spring-boot/docs/2.7.6/reference/html/howto.html#howto.logging-->
<!--https://www.baeldung.com/spring-boot-logging-->
<!--https://github.com/spring-projects/spring-boot/blob/v2.7.6/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/-->
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<property name="LOG" value="log-folder"/>
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %p %logger : %m%n</Pattern>
<charset>${FILE_LOG_CHARSET}</charset>
</encoder>
<file>${LOG}/my-log-file.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG}/archived/my-log-file-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart>
<maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize>
<totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap>
<maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-7}</maxHistory>
</rollingPolicy>
</appender>
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
<logger name="my-logger-name" level="info">
<appender-ref ref="ROLLING_FILE"/>
</logger>
</configuration>
static final Logger log = LoggerFactory.getLogger("my-logger-name");
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Person> listPeople = new ArrayList<>();
listPeople.add(new Person("Mari", "Ke ri", 22));
listPeople.add(new Person("Poti", "Ty Re Mi", 18));
listPeople.add(new Person("Pow", "Keri", 19));
System.out.println(listPeople);
// Можно так
listPeople.sort(new PersonComparator());
// А можно так
listPeople.sort((p1, p2) -> {
int len1 = p1.getSurname().split(" ").length;
int len2 = p2.getSurname().split(" ").length;
if (len1 != len2) {
return Integer.compare(len1, len2);
}
return Integer.compare(p1.getAge(), p2.getAge());
});
System.out.println(listPeople);
}
}
class PersonComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
int len1 = p1.getSurname().split(" ").length;
int len2 = p2.getSurname().split(" ").length;
if (len1 != len2) {
return Integer.compare(len1, len2);
}
return Integer.compare(p1.getAge(), p2.getAge());
}
}
@AllArgsConstructor
@Getter
@ToString
class Person {
private String name;
private String surname;
private int age;
}
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Person2> listPeople2 = new ArrayList<>();
listPeople2.add(new Person2("Mari", "Ke ri", 22));
listPeople2.add(new Person2("Poti", "Ty Re Mi", 18));
listPeople2.add(new Person2("Pow", "Keri", 19));
System.out.println(listPeople2);
// Так
listPeople2.sort((p1,p2)-> p1.compareTo(p2));
// То же самое
listPeople2.sort(Person2::compareTo);
System.out.println(listPeople2);
}
}
@AllArgsConstructor
@Getter
@ToString
class Person2 implements Comparable<Person2> {
private String name;
private String surname;
private int age;
@Override
public int compareTo(Person2 p) {
int len1 = this.surname.split(" ").length;
int len2 = p.getSurname().split(" ").length;
if (len1 != len2) {
return Integer.compare(len1, len2);
}
return Integer.compare(this.age, p.getAge());
}
}