小编jij*_*ijo的帖子

基于运行时属性对对象列表进行排序

我有一个VO的arraylist.这些对象具有许多属性和相应的get/set方法.我想根据我将在运行时获得的属性对此数组列表进行排序.让我详细解释一下.我的VO是这样的

public class Employee {
    String name;
    String id;

    private String getName() {
        return name;
    }

    private String getId() {
        return id;
    }
}
Run Code Online (Sandbox Code Playgroud)

我将在运行时获取一个字符串'sortType',它可以是'id'或'name'.我想根据字符串的值对列表进行排序.

我试图一起使用比较器和反射,但没有运气.可能是我没有正确使用它.我不想使用if循环并创建新的比较器类.还有其他想法吗?

try catch应该在新类中.这是工作代码.如果你想为比较器使用一个单独的类,请在@ Bohemian的评论中找到它.

        String sortType = "name"; // determined at runtime
        Collections.sort(results, new Comparator<Employee>() {
        public int compare(Employee c1, Employee c2) {
            try{
            Method m = c1.getClass().getMethod("get" + StringUtils.capitalize(sortType));
            String s1 = (String)m.invoke(c1);
            String s2 = (String)m.invoke(c2);
            return s1.compareTo(s2);
            }
            catch (Exception e) {
                return 0;
            }
        }
       });
Run Code Online (Sandbox Code Playgroud)

java sorting reflection list comparator

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

扩展多个类

我知道Java不支持多继承,因为不允许扩展多个类.我只是想知道我的问题是否有解决方法.

我有一个名为CustomAction需要扩展两个抽象类的类,BaseAction并且QuoteBaseAction.我不能改变任何这些抽象类,并将其他类扩展.

这些抽象类具有我需要使用的方法实现.我也无法创建接口,因为接口只能扩展另一个接口.

有任何想法吗?

java inheritance

6
推荐指数
2
解决办法
665
查看次数

Angular 在循环中多次调用同一 API

我需要迭代对象数组并为每个对象进行 API 调用。根据响应中的对象数量,我正在创建新对象并将其推入数组中。下面是示例代码。例如,如果最初有 2 个提供商,每个提供商都有 2 个位置,updatedProviderList则将有 4 个提供商。这工作正常。

问题是,updateProvidersInState只有在所有 API 调用和与之相关的逻辑完成后才必须调用。我已尝试使用如下所示的索引,但它不起作用。有什么方法可以updateProvidersInState在所有 API 调用完成后才调用?

let providers = []; //assume this is already populated
let updatedProvider;
let updatedProviderList;
providers.forEach((prv, index) => {
  this.dataService.getLocation(prv.id).subscribe((response: LocationResults) => {
    response.locations.forEach((location, i) => {
      updatedProvider = cloneDeep(prv);
      updatedProvider.location = location;
      updatedProviderList.push(updatedProvider);
      if (index === providers.length - 1 && i === response.length - 1) {
        this.updateProvidersInState(updatedProviderList);
      }
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

observable rxjs angular

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

Angular 6:从 SelectionModel 中检索数据

我有一个组件,它有一个带有复选框的 mat-table,使用 SelectionModel。这是我必须检索所选数据的代码。

fileSelect = new SelectionModel<FileInfo>(true, []);
Run Code Online (Sandbox Code Playgroud)

该方法在表单的 ngSubmit 中调用。

sendFileInterrupt() {
 let selectedFileIds: string[];
    for (let item of this.fileSelect.selected) {
      console.log(item.fileId);
      selectedFileIds.push(item.fileId);
    }
Run Code Online (Sandbox Code Playgroud)

选定的 fileId 已登录到控制台,但是在尝试将其添加到 selectedFileIds 数组时,出现错误

无法读取未定义的属性“推送”

在将数据推入数组之前,我是否必须实例化或初始化数组?

arrays typescript angular

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

Angular:在数据源中使用对象时,MatSort 不起作用

我有一个 angular 6 应用程序,它有一个 Mat Table。表的数据填充如下。排序适用于字段positionand name,但不适用于weightsymbolwhich 是detail对象的一部分。我也尝试将列命名为detail.weightin displayedColumnsmatColumnDef但没有运气。请告知我做错了什么?

const ELEMENT_DATA: PeriodicElement[] = [
  {position: 1, name: 'Hydrogen', detail: {weight: 4.0026, symbol: 'He'}},
  {position: 2, name: 'Helium', detail: {weight: 4.0026, symbol: 'He'}},
]

displayedColumns: string[] = ['position', 'name', 'weight', 'symbol'];
Run Code Online (Sandbox Code Playgroud)

模板

 <ng-container matColumnDef="weight">
    <th mat-header-cell *matHeaderCellDef mat-sort-header> Weight </th>
    <td mat-cell *matCellDef="let element"> {{element.detail.weight}} </td>
  </ng-container>
Run Code Online (Sandbox Code Playgroud)

这是该问题的stackblitz url
https://stackblitz.com/edit/angular-kumdeq

angular-material angular

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

在更新中使用regexp_replace

我有一个db列report_name,它的值与此类似

000007091_PaymentRegisterReport _D x3A 975844_2012-12-26.XLS
Run Code Online (Sandbox Code Playgroud)

我需要在所有具有XLS扩展名的PaymentRegisterReport中删除_D之前的空格.有人可以帮我使用regex在update语句中使用regexp_replace函数吗?

regex sql oracle

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

找出运行的特定weblogic进程

我需要找到启动并运行的weblogic实例.
我的unix框同时包含java 5和6,并且有多个weblogic域.
我需要杀死一个特定域的java实例.
这是ps -ef |的输出 grep java命令,但无法确定哪个PID是哪个域实例.
请帮忙.

 ps -ef | grep java
weblogic 16374 21956  0 23:30:33 ?        1:00 /app/bea/jdk1.6.0_33/bin/java -Xmx1024m -Xms256m -Dlog4j.configuration=file:///
    root 22733 22732  0   Apr 29 ?       123:29 ../jre/bin/java -da -server -Dtw.server=false -Djava.security.manager=com.tripw
weblogic 16862 21956  0 23:31:13 ?        2:04 /app/bea/jdk1.6.0_33/bin/java -Xmx1024m -Xms256m -Dlog4j.configuration=file:///
weblogic  8445 21956  0 18:32:33 ?        3:29 /app/bea/jdk1.6.0_33/jre/bin/java -Dweblogic.log.StdoutSeverity=Debug -Dweblogi
weblogic 16529 21956  0   May 29 ?       88:28 /app/bea/home/jdk150_15/bin/java -server -Xms1024m -Xmx1024m -XX:MaxPermSize=25
weblogic 15357  5681  0 00:07:14 pts/4    0:00 …
Run Code Online (Sandbox Code Playgroud)

java unix grep weblogic

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

在javascript中手动排序数组

我有一个像下面这样的字符串数组。

ABC
QRS
DEF
HIJ
TUV
KLM
NOP
Run Code Online (Sandbox Code Playgroud)

我需要按字母顺序在 javascript 中对这个数组进行排序,除了几个已知的值。即我需要 DEF 和 NOP 出现在前 2 个位置,并按字母顺序按升序对数组的其余部分进行排序。这是我按字母顺序对整个数组进行排序所写的内容,现在我需要前 2 个位置的 2 个值。

array.sort(function(a,b){return ((a < b) ? -1 : (a > b) ? 1 : 0)});
Run Code Online (Sandbox Code Playgroud)

预期结果。

DEF
NOP
ABC
HIJ
KLM
QRS
TUV
Run Code Online (Sandbox Code Playgroud)

数组的内容是动态的,所以如果数组有 DEF 或 NOP,那么它们应该在最上面,否则应该按字母顺序排序。解决这个问题的最佳方法是什么?

javascript sorting

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